又到了Python自动化课程了,每一个自动化都涉及到单元测试框架及驱动框架,而unittest是py下的主流架构,所有的自动化框架都应该掌握:概念,类方法及应用:
昨晚在给同学们上了自动化测试单元框架unittest之后,突发奇想,要总结下自己今天上的课程内容。于是有了下面的一幕:
首先,上课的目标是要学会关于unittest框架的基本使用及断言、批量执行。
第一,unittest是什么:
为了让单元测试代码能够被测试和维护人员更容易地理解,最好的解决办法是让开发人员遵循一定的规范来编写用于测试的代码,所以说unittest就随机缘而生,又因为用的人多了,所以逐渐的变成了python的单元测试标准。unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果。
第二,unittest类和方法的简介:
(注:所有的测试用例需要使用test开头作为用例名称)
unittest.TestCase:所有测试用例类必须继承TestCase类。
TestCase.setUp():setUp()方法用于测试用例执行前的初始化工作。例如可以初始化driver对象,可以新建数据库访问对象,可以存放公共变量等。
TestCase.tearDown():tearDown()方法用于测试用例执行之后的善后工作。如关闭浏览器,关闭数据库连接等。
TestCase.assert*():assert是一些断言方法:在执行测试用例的过程中,最终用例是否执行通过,是通过判断测试得到的实际结果和预期结果是否相等决定的。(常用的断言有:assertEqual,assertIs,assertIn等)
unittest.skip():装饰器,当运行用例时,有些用例可能不想执行等,可用装饰器暂时屏蔽该条测试用例。
unittest.main():main()方法使用TestLoader类来搜索所有包含在该模块中以“test”命名开头的测试方法,并自动执行他们。执行方法的默认顺序是:根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z。所以以A开头的测试用例方法会优先执行,以a开头会后执行。
unittest.TestSuite():TestSuite()类是用来创建测试集的。
unittest.TestSuite().addTest():addTest()方法是将测试用例添加到测试集合中。
unittest.defaultTestLoader().discover():通过defaultTestLoader类的discover()方法可自动更具测试目录start_dir匹配查找测试用例文件(test*.py),并将查找到的测试用例组装到测试套件,因此可以直接通过run()方法执行discover。
unittest.TextTextRunner():通过该类下面的run()方法来运行suite所组装的测试用例,入参为suite测试套件。
第三,进行代码unittest实践:
unnitest可以与接口requests或者WebUI selenium做很好的整合,这里我们做一个稍微复杂一点的框架,由用例和用例管理两个模块组成
1.先来看一下用例部分,主要是使用selenium完成对百度的操作,其中有两个测试用例,用例名称不同,但实现功能都一致,实现了打开百度页面,输入selenium,点击搜索按钮,判断页面上是否存在一个文本内容。
具体实现代码如下:
新建Test_baidu测试类:
让我们来看一下这个用例脚本的实现,首先在setup初始化浏览器对象,然后编写测试用例方法,打开百度页面,输入selenium,点击搜索按钮。最后teardown中将浏览器进行关闭。写了两个测试用例(testbaidu,testbaidu1),然后我们使用Testsuit方法将我们的测试用例添加到测试集suit中,最后使用run方法运行测试集。
2.当我们有多个测试用例集的时候,就可以通过下面的代码完成自动搜索,甚至分类搜索(基于优先级或者模块),从而让测试从点到集合。
新建 run_all_case类:
最后,直接运行新建的run_all_case类进行自动化测试。
Python是一个很优秀的轻量语言,对于大家学习的代价较小。