当前位置: 首页 > wzjs >正文

建设行业的门户网站wordpress 加密连接

建设行业的门户网站,wordpress 加密连接,广告推广文案,做内贸哪个网站好1.什么是unittest? unittest是Python自带的一个单元测试框架, 它可以做单元测试, 也能用于编写和运行重复的测试工作。它给自动化测试用例开发和执行提供了丰富的断言方法, 判断测试用例是否通过, 并最终生成测试结果. 2.unittest组成 2.1 TestCase TestCase即测试…

1.什么是unittest?

        unittest是Python自带的一个单元测试框架, 它可以做单元测试, 也能用于编写和运行重复的测试工作。它给自动化测试用例开发和执行提供了丰富的断言方法, 判断测试用例是否通过, 并最终生成测试结果.

2.unittest组成

2.1 TestCase

        TestCase即测试用例,也就是真正执行的代码,要定义一个测试类必须满足以下条件:

        它必须继承自unittest.TestCase

        测试方法必须以test开头

import unittestclass Test_class(unittest.TestCase):def test_demo1(self):print('demo1测试代码')def test_demo2(self):print('demo2测试代码')

2.2 TestSuite

        suite的意思是套件,如果把TestCase比作是一个个物品的话,那么TestSuite就是一个集装箱,它可以存放很多case并一次性执行。

suite = unittest.TestSuite()
suite.addTest(Test_class('test_demo1'))
suite.addTest(Test_class('test_demo2'))

2.3 TestLoader

        可以看作是TestSuite的补充,我们从TestSuite的添加用例代码可以看出TestSuite每添加一个用例都需要add,如果用例很多的话很不方便,TestLoader就很好的解决了这个问题,它可以一次添加多个用例,不需要一个一个添加。

loader = unittest.TestLoader()
suite = loader.discover('./case', pattern='test_*.py') #返回值是TestSuite类型

        discover的第一个参数表示要遍历文件的地址,可以是相对地址和绝对地址,pattern表示要遍历文件的文件名, 这里表示所有以test_开头的python文件,则loader.discover('./case', pattern='test_*.py')表示遍历与当前python文件同一目录下的case文件夹下所有以test_开头的python文件,将它装载到suite中。

2.4 TestRunner

        测试用例运行器,真正执行用例的容器。

runner = unittest.TextTestRunner()
runner.run(suite)

执行runner.run(suite)之后,程序开始执行测试用例并输出结果:

2.5 Fixture

        英文意思是固定装置,夹具的意思,在unittest中表示:不管用例是什么,用例执行前的代码和用例执行后的代码都固定要执行。比如一个人想完成打英雄联盟这个动作(用例),他的步骤是:打开电脑,玩英雄联盟,关闭电脑。现在来了另一个人要完成打穿越火线这个用例,则他的步骤是:打开电脑,玩穿越火线,关闭电脑。我们可以看出这两个用例除了真正执行的内容(这里是玩游戏)不一样之外,其他部分(打开/关闭电脑)都是相同的,我们就可以把打开电脑和关闭电脑设置为夹具,让它在用例执行过程中自动执行。

        比如这个图,我们可以看出除了输入用户名密码和验证码有区别外,其他都可以被设置为夹具,但是夹具出现的频率是不一样的,如图上的 1.打开浏览器 在所有测试用例中都只需要执行一次,而 2.打开网页,点击登录 则是在每个用例执行之前都要执行,它们怎么区分呢?按照级别划分,分为方法级别Fixture,类级别Fixture,模块级别Fixture。

2.5.1 方法级别Fixture

        方法级别的Fixture在单个用例执行之前/后都要执行,它的定义方式也很简单:

class Test_class(unittest.TestCase):def setUp(self):print('打开网页')def tearDown(self):print('关闭网页')

注意:这里的函数名不能修改,必须是setUp(设置) 和 tearDown(拆解)。

2.5.2 类级别Fixture

        类级别的Fixture会在执行测试类之前/后自动执行,因为是类级别的,所以它要求必须是类方法(可以被类名直接调用)而不是实例方法。

class Test_class(unittest.TestCase):@classmethoddef setUpClass(cls):print('打开浏览器')@classmethoddef tearDownClass(cls):print('关闭浏览器')

@classmethod 设置了下面的函数为类方法,而 setUpClass和tearDownClass则是 类Fixture 的固定名称

2.5.3 模块级别Fixture

        每个python文件就是一个模块,模块级别Fixture就是在执行这个python文件之前/后执行的代码,它定义在类外,作为一个函数。

def setUpModule():print('模块级别Fixture SetUp')def tearDownModule():print('模块级别Fixture tearDown')

3.assert断言

        断言的意思是当程序执行到某个位置时,断言后的条件必须成立,否则程序报错。比如现在一个登录逻辑,用户成功登录了那么我们肯定就能得到他的username,我就可以在一些需要登录作为前提的操作下断言username非空,如果程序正常执行那么通过断言,程序正常执行;如果出现了异常,username为空,那么程序直接报错

unittest单元测试框架提供了一整套内置的断言方法:

  • 1、如果断言失败,抛出AssertionError的错误,case为失败状态;
  • 2、如果断言成功,会标识case为成功状态

使用较多的是Equal和In。下面是一个例子:

class Test_add(unittest.TestCase):def test_add2(self):self.assertEqual(1,1)

当然,这里的 self.assertEqual(1,1) 永远为真,我们可以根据自己的要求将两个参数替换为其他值,函数的返回值等等。

4.参数化

        在unittest中使用参数化需要安装包:parameterized,为什么需要参数化呢?我们可以根据下面这个例子得到答案:

class Test_add(unittest.TestCase):def test_demo1(self):self.assertEqual(add(1, 2), 3)def test_demo2(self):self.assertEqual(add(10, 99), 109)def test_demo3(self):self.assertEqual(add(1.1, 2.2), 3.3)

我们设计了三个测试用例分别测试add函数功能是否正确,但是它们的代码几乎是重复的,如果用例很多的话,需要写很多重复的用例代码,参数化就是解决这个问题,它将在用例中需要使用到的值存放在一个列表中,列表中的元素都是元组,每个元组都对应一次测试用例的参数。比如上面的三个用例对应的参数列表的为:[(1, 2, 3), (10, 99, 100),(1.1, 2.2, 3.3)]

下面是具体的例子实现:

在执行data = data.get("test_data")时,data的数据是列表中嵌套列表,而不是列表中嵌套元组,但我们知道它们除了元组不可更改外其他都是一样的,所以也能正确执行。

@parameterized.expand()必须写在测试用例上,表示这个测试用例使用参数化,现在我们直接执行测试类或者使用suite,runner都能正确执行

Launching unittests with arguments python -m unittest test_tools.Test_add in C:\Users\31294\Desktop\python_project\day10作业1

Ran 3 tests in 0.006s

FAILED (failures=1)


3.3 != 3.3000000000000003

Expected :3.3000000000000003
Actual   :3.3
<Click to see difference>

Traceback (most recent call last):
  File "C:\Users\31294\Desktop\python_project\.venv\Lib\site-packages\parameterized\parameterized.py", line 620, in standalone_func
    return func(*(a + p.args), **p.kwargs, **kw)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\31294\Desktop\python_project\day10作业1\test_tools.py", line 13, in test_add1
    self.assertEqual(add(p1, p2), result)
AssertionError: 3.3000000000000003 != 3.3


Process finished with exit code 1

http://www.dtcms.com/wzjs/785114.html

相关文章:

  • 哈尔滨seo网站排名wordpress文章改为已发布
  • 海口网站设计建设南通网络公司网站
  • 关于推进网站集约化建设的讲话网站开发考研是什么专业
  • 深圳网站设计公司费用广州建网站藤虎
  • 便宜的网站设计建网站必需服务器吗
  • 搜索大全引擎地址广州 网站优化
  • 网站规划与建设参考文献外国人做的汉字网站
  • php做网站首页单页网站制作工具
  • 张家口领先的网站建设服务商ppt模板下载免费完整版简约
  • 象山网站建设企业网站建设公司选择分析
  • 网站开发需要多少钱app唐河网站制作公司
  • 模板 网站北京网站建设联系兴田德润
  • 罗湖中小网站建设建设网站的和服务器
  • 跨境电商建站工具嘉兴网站建设公司就找嘉乐网络
  • 目前比较新的网站建设技术海南通信建设有限公司官方网站
  • 网站推广方案编写东莞市建设银行招聘网站
  • 网站建设最重要的因素怎么建商城网站吗
  • asp网站源码安装流程微网站制作需要多少钱
  • 福清市建设局监督站网站大连seo网站
  • 做网站写代码怎么样深圳网站推广优
  • 沁水网站建设网址之家123上网主页
  • 济南高端定制网站建设百度官方优化软件
  • 扁平化设计风格的网站模板西安黄页88网企业名录
  • 本作业是网站建设与维护python写网页
  • 定远建设局官方网站4免费网站建站
  • dedecms 食品网站模板做饲料机械的网站
  • 做旅游网站赚钱吗传奇手游代理平台价格表
  • 自己在网站开发的客户怎么联系网站设计做什么的
  • 建设官方网站意义怎么劝客户做网站
  • 关于网站开发的创业计划书邢台企业网站建设咨询