自动化测试框架——unittest

说明:
1、该篇博客所用到的代码已上传网盘,自行下载。提取码:2mqs
2、未特别注明的代码在testbaidu1.py和testbaidu2.py文件里,大多数在testbaidu1.py里
3、百度网盘里testbaidu.py是学习数据驱动之前的代码备份(因为感觉数据驱动部分代码有点乱)

1、unittest的框架了解

unittest是python的单元测试框架(只是功能自动化),也可以对程序最小模块进行敏捷化测试。在自动化测试中,我们虽然不需要做白盒测试,但是必须知道所使用语言的单元测试框架。利用单元测试框架,创建一个类,该类继承unittest的TestCase,这样可以把每个case看成是一个最小的单元,由测试容器组织起来,到时候直接执行,同时引入测试报告。
主要解决的问题:
批量执行: 一次执行不同类里的不同方法,unittest框架提供的测试套件可以将不同文件下的不同类下的不同方法集合起来统一执行;
参数化: 一个测试方法有不同的参数进行测试,unittest可以只写一个方法,然后传递不同的参数;
断言: 判断两个不同参数的结果是否一致
测试报告: 输出测试结果,以html的形式
unitest各组件的关系:
在这里插入图片描述
test fixture 测试固件。setUp()和setDown()是固定的方法;setUp()功能是初始化操作,比如驱动浏览器打开网址或定义全局变量;setDown()的功能是清理测试环境,比如测试完毕关闭浏览器;
test case 测试用例。编写单元测试用例最常用的类
test suite 测试套件。单元测试用例的集合,批量执行测试用例,其方法有addTest(),loadTest()
test runner 执行测试用例。
test report 生成测试报告。

2、批量执行脚本

1、构建测试套件:TestSuite
addTest() ,makeSuite(),TestLoader(),discover()的应用
(1)addTest():测试套件可将多个测试用例整合到一起放在一个容器里执行。unittest模块中提供了TestSuite类来生成测试套件,使用该类的构造函数可以生成一个测试套件的实例,该类提供了addTest来把每个测试用例加入到测试套件中。
(2)makeSuite()和TestLoader():在unittest 框架中提供了makeSuite() 的方法,makeSuite可以实现把测试用例类内所有的测试case组成的测试套件TestSuite ,unittest 调用makeSuite的时候,只需要把测试类名称传入即可;TestLoader 用于创建类和模块的测试套件,一般的情况下,使TestLoader().loadTestsFromTestCase(TestClass)来加载测试类。
(3)discover():discover 是通过递归的方式到其子目录中从指定的目录开始, 找到所有测试模块并返回一个包含它们对象的TestSuite ,然后进行加载与模式匹配唯一的测试文件,discover 参数分别为 discover(dir,pattern,top_level_dir=None)
如下图所示是每个方法的使用方法。
在这里插入图片描述
执行结果:代码在文章开头的说明里,自行下载(执行文件:runall.py)
在这里插入图片描述

2、用例的执行顺序
执行顺序按照:0—9 ,A—Z,a—z。
即:类名test_后面的首字母按照0—9 ,A—Z,a—z的顺序执行。对于测试目录与测试文件来说,unittest框架同样是按照这个规则来加载测试用例。

3、忽略用例执行
若想要忽略执行某个测试方法,则在该测试方法前面加上标签:@unittest.skip(“skipping”)
下图是忽略掉一个测试方法执行后的结果:
在这里插入图片描述

3、unittest断言

判断预期结果是否和实验结果相等。对于每个单独的case来说,一个case的执行结果中,必然会有期望结果与实际结果,就会通过断言来判断该case是通过还是失败。在unittest的库中提供了大量的使用方法来检查预期值与实际值,来验证case的结果,检查条件大体分为等价性,逻辑比较以及其他,若给定的断言通过,测试会继续执行到下一行的代码,如果断言失败,对应的case测试会立即停止或者生成错误信息(一般是打印错误信息),但是不影响其它case执行。

常用断言:

序号断言方法断言描述
1assertEqual(arg1, arg2, msg=None)验证arg1=arg2,不等则fail
2assertNotEqual(arg1, arg2, msg=None)验证arg1 != arg2, 相等则fail
3assertTrue(expr, msg=None)验证expr是true,如果为false,则fail
4assertFalse(expr,msg=None)验证expr是false,如果为true,则fail
5assertIs(arg1, arg2, msg=None)验证arg1、arg2是同一个对象,不是则fail
6assertIsNot(arg1, arg2, msg=None)验证arg1、arg2不是同一个对象,是则fail
7assertIsNone(expr, msg=None)验证expr是None,不是则fail
8assertIsNotNone(expr, msg=None)验证expr不是None,是则fail
9assertIn(arg1, arg2, msg=None)验证arg1是arg2的子串,不是则fail
10assertNotIn(arg1, arg2, msg=None)验证arg1不是arg2的子串,是则fail
11assertIsInstance(obj, cls, msg=None)验证obj是cls的实例,不是则fail
12assertNotIsInstance(obj, cls, msg=None)验证obj不是cls的实例,是则fail

断言示例:
在这里插入图片描述> 另外在selenium IDE录制的时候也可以断言(打开界面后右击,如下图),但是格式是pytest
在这里插入图片描述

4、生成HTML报告(HTMLTEstRunner)

首先确认这个目录(C:\Users\dell\AppData\Local\Programs\Python\Python38\Lib)下是否有HTMLTestRunner.py文件,没有的话,下载地址为:HTMLTestRunner.py
生成测试报告的部分代码及注释如下图所示(网盘下载完整代码:text.py)
在这里插入图片描述> 执行完的结果为:
在这里插入图片描述> 生成报告后查看的结果:
在这里插入图片描述

5、异常捕捉与错误截图

如下图所示是断言时若发生错误便生成错误截图的代码加注释:
在这里插入图片描述> 执行结果—>错误截图:
在这里插入图片描述

6、数据驱动

当需要多次执行一个案例时(有很多的测试用例),有多少测试用例就编写多少案例无疑既浪费时间又浪费空间。那么可以使用数据驱动来解决这一问题。python自带的unittest没有自带数据驱动功能,所以若使用unittest框架的同时也想使用数据驱动,那么就可以在cmd下载:下载语句为:pip install ddt,查看是否安装好的语句是:pip show ddt
ddt的参考使用文档
想要说的都在图片里了
在这里插入图片描述
在这里插入图片描述
一次传一个参数:
在这里插入图片描述
一次传两个参数(一组参数,有限个,可以以下图的形式存在):
在这里插入图片描述
一次传两个参数(一组参数:无限个,需要写在文件里):
在这里插入图片描述
若参数在json文件里则按如下图所示操作:
在这里插入图片描述

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值