python自动化unittest作用,
引言在编写接口自动化用例时,我们通常会为一个接口创建一个. py文件,一个接口测试用例封装成一个函数(方法)。但是在批量执行的过程中,如果其中一个出错,后面的用例就无法执行,运行大量接口测试用例时如何管理和加载测试数据。对于测试用例加载和执行控制,python语言提供了unittest unittest框架,测试用例在unittest框架下编写。使用此框架,可以单独或批量加载独立的案例执行和更灵活的执行控制。为了更好的管理和加载测试数据,这里介绍数据驱动模块:ddt,测试数据和测试脚本分离,通过ddt数据驱动将测试数据加载到测试用例脚本中,通常在接口自动化测试中unittest和ddt一起使用,从而加载测试用例脚本和测试数据来完成测试执行。我们来看看unittest框架和ddt的具体应用。
一、unittest测试框架unittest单元测试框架是python语言的一组标准模块,提供了许多可操作的测试用例及用例加载、测试预测试、场景恢复、测试结果输出等一系列类和方法。
1.1.unittest框架中的四个核心组件概念:
(1)TestCase: TestCase类,需要在编写测试用例脚本时继承,使其具有该类的属性和方法。一个测试用例实例就是一个测试用例,其中的测试用例方法都是以test开始的。
(2)TestSuite:测试集,即测试用例的集合,用于组织用例。
(3)testrunner:用于执行测试用例,返回测试用例的执行结果,可以用图形或文本的方式直观的显示出来。HTMLTestRunner用于生成图形报告,TextTestRunner用于生成简单的文本测试结果。
(4)testfixure:测试剪辑,主要用于测试用例的预初始化和执行后的销毁。
2.测试用例-测试用例
新创建的。py测试用例文件必须以test开头,比如test_login.py,主要用来标识测试用例在测试用例文件中写入的类。它必须继承unittest。TestCase测试类中测试用例的方法名必须以test开头,用于标识测试类中测试用例的数量以及测试用例的执行顺序。应该是在test (0 ~ 9,a ~ z,)开头的方法之后,按照Ascill代码顺序执行。
也叫测试夹具,主要提供用例前初始化和执行后销毁测试剪辑两种方法。一个是方法级:setup()和teardown(),一个是类级:setUpClass()和tearDownClass()方法级测试剪辑。在每个测试用例执行前后,setup()和teardown()应该运行一次。类,在所有测试用例执行之前,只运行setUpClass()和tearDownClass()setUp()一次:在每个测试用例之前运行。
TearDown():在每个测试用例运行后执行。
Class():必须使用@classmethod decorator,并且所有case在运行之前都应该只运行一次。
TearDownClass():您必须使用@classmethod decorator,并且所有case将只运行一次。
下面是一个简单的代码示例,用于查看TestCase和TestFixure的用法。
(1)使用setup()和teardown(),创建test_666.py文件并编辑以下代码:
导入测试类test _ unittest(unittest . test case):def setup(self):print(测试环境初始化并启动设置)def teardown (self): print(测试执行完成,运行tear down )print(-)def test _a(self):print(启动测试_ A用例)def test_a (self)。print(开始执行test_1用例)def notebook _ 1 (self): print(不执行notebook _ 1用例)if _ _ name _= _ _ main _ :unittest . main()执行后输出如下:
在代码中,我们写了四个def用例方法,只执行了三个DEF,因为最后一个DEF不是测试的开始。可以看到,setup()和teardown()对于每个def用例都会执行一次,其中test_1先执行,test_A后执行,test_a最后执行。
(2)使用setUpClass()和tearDownClass()
对于setUpClass()和tearDownClass(),我们只需要稍微修改一下上面的代码。
导入测试类test _ unittest(unittest . test case):@ class method def setup类(cls): print(测试环境初始化,setup的执行)@ classmethoddef tear down类(cls): print(测试执行完成,运行tear down )print(-)def test _a(self):print(启动测试_ A用例)def test_a (self)。如果_ _ name _ _= _ _ main _ :unittest . main()运行如下,则打印(开始执行test_1用例):
可以看到在所有用例执行完毕后,setUpClass()和tearDownClass()只运行一次。因此,在编写测试脚本时,有许多测试用例写在其中,
此时,我们希望在所有用例执行完毕后销毁环境。这时候用setUpClass()和tearDownClass()比较好。
3.测试套件-测试集
Unittest框架提供了unittest。TestSuite()和unittest。TestLoader()类,封装了加载测试用例的方法,将测试用例加载到测试集中。
(1)单元测试。TestSuite()提供了一个单一的用例加载方法。
AddTest():加载单个用例。当然,你可以在addTest()列表中添加多个用例的方法名来加载多个测试用例。
(2)单元测试。TestLoader()提供了一种批量加载或发现用例的方法。
LoadTestsFromTestCase:添加一个测试类。
LoadTestsFromModule(模块名):添加模块
Discover(测试用例所在的目录):指定要加载的目录,自动找到该目录下所有符合命名规则的测试用例。
4.试运行-试运行
Testrunner用于执行测试用例,并能生成相应的测试报告。检测报告可以以两种形式呈现,一种是文本文本,一种是html格式。
Html格式为HTMLTestRunner。HTMLTestRunner是Python标准库unittest框架的扩展,可以生成直观清晰的HTML测试报告。使用的前提是下载HTMLTestRunner.py,然后放在python的安装目录的scripts目录下。
通过代码示例来看看两个组件testsuite和testrunner的使用。我们在上面的test_666.py用例文件中写了三个用例。现在让我们加载这些用例。
创建一个新的run_case.py文件,该文件与test_666.py文件:test放在同一个包文件中。编辑run_case.py文件,使其按如下方式运行:
unittest from test . test _ 666 import test _ unittest #单用例加载suite=unittest . test suite()case 1=test _ unittest( test _ 1 )2=test _ unittest( test _ a )suite。Addtest(案例1)套件。add Test(case 2)print(suite)print(-)#批量用例加载case _ path=r e Test#根据文件路径加载。注意文件是包文件,也就是有_ _ init _ _。pyall _ case=unit test . defaulttestloader . discover(case _ path,pattern= test _ 666 *。文件下的py,Top _ level _ dir=none)all _ case 1=unittest . default test loader . loadtestsfromtestcase(test _ unittest)# Load print(all _ case)print(-)print(all _
E:\ API _ test \ Scripts \ python . exe E:/API _ test/test _ bak/run _ case . pyunittest . suite . test suite tests=[test . test _ 666 . test _ unittest test test method=test _ 1,test . test _ 666 . test _ unittest test test method=test _ A]-unittest . suite . test suite tests=[unittest . suite . test suite tests=[test _ 666 . test _ unittest test test test test test test test method=tes t _ 1,
5.断言-测试断言
不管是什么样的测试用例,最终都需要在用例执行之后进行验证。在接口自动化测试中,在我们执行接口案例之后,我们还需要验证断言案例执行是否符合我们的预期。Unittest提供了丰富的断言方法。常见的断言如下:
二、ddt数据驱动@ddt:类的decorator,从TestCase类@ data()继承而来:@ data decorator可以把参数当作测试数据,参数可以是单值、列表、祖先、字典,用来输入测试数据@unpack:分解数据标志,主要把祖先和列表解析成多个参数@file_data():输入文件,
Unittest从DDT导入数据,unpack,DDT @ ddtclassmydt(unittest . test case):@ data( 123 )#单值def test1(self,Test1):print(test data1)print(-)@ data([1,2,3],[4,5,6]) # list def test2(self,test data 2):print(test data 2) @ data((1,2,3)) # tuple def test2(self,Testdata3): print (testdata3)
代码示例:
从DDT导入数据的Unittest,unpack,DDT @ ddtclassmydt(unittest . test case):@ data([1,2],[3,4]) # list @unpack def test2(self,testdata1,Testdata2): print(第一个反汇编参数:,testdata1) print(第二个反汇编参数:,test data 2)print(-)if _ _ name _== _ _
通过ddt和unittest框架的结合,可以实现测试用例脚本编写、测试执行控制和测试数据的批量加载,从而完成不同接口的测试用例的批量执行,覆盖不同的测试场景。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。