0


unittest的运行方式

unittest的运行方式

unittest的运行方式

unittest的运行方式一直是个谜:主要是run的选择,有三个模块unittest.main()、unittest.testsuite()、unittest.defaultTestLoader() 三种

1. unittest.main()

1.unittest.main() 测试用例执行,执行器是unittest
直接执行,按照test开头asii码排序的测试用例执行,执行器是unittest
也可以不写,直接放在unittest.testcase上,执行该class下所有用例

if __name__ =='__main__':
    unittest.main()#直接执行

2. unittest.TestSuite()

2.1 unittest.testsuite() 测试套件执行,执行器是python,按照addTest()的加载顺序执行单次执行
首先创建测试用例套件,手动添加测试用例到测试套件中,再实例化runner类,最后运行测试。

if __name__ =='__main__':
    suite1 = unittest.TestSuite()
    suite1.addTest(TestUi('test_01_uicheck'))
    suite1.addTest(TestUi('test_02_uicheck'))
    suite1.addTest(TestUi('test_03_uicheck'))#unittest.main(defaultTest='suite1')两个调用方法结果相同没有区别
    unittest.TextTestRunner().run(suite1)

2.2 unittest.testsuite() 测试套件执行,执行器是python,按照addTests()的加载顺序执行单次执行
首先创建测试用例套件,手动添加测试用例到测试套件中,再实例化runner类,最后运行测试

if __name__ =='__main__':
    suite = unittest.TestSuite()
    testcase =[TestUi('test_01_uicheck'),TestUi('test_02_uicheck'),TestUi('test_03_uicheck')]
    suite.addTests(testcase) 
    unittest.main(defaultTest='suite')#unittest.main(defaultTest='suite1')两个调用方法结果相同没有区别
    unittest.TextTestRunner().run(suite)

3. unittest.defaultTestLoader()

3.unittest.defaultTestLoader() 测试文件执行,执行器是python,按照discover匹配模式的ASCII单次执行
参数说明:start_dir 开始执行用例的目录 pattern 测试脚本匹配规则。

if __name__ =='__main__':
    discovero = unittest.defaultTestLoader.discover(start_dir='./',pattern='test*.py') 
    test_runner = unittest.TextTestRunner()
    test_runner.run(discovero)

4. 探索unittest执行顺序

test01.py

print('主')classtest1(unittest.TestCase):defsetUp(self)->None:print('start...')deftearDown(self)->None:print('finish...')deftest_01(self):print('fist')deftest_02(self):print('second...')# suite1 = unittest.TestSuite()# suite1.addTest(test1('test_01'))# suite1.addTest(test1('test_02'))# with open(file=report_file,mode='w',encoding='utf-8') as f:#     runner = unittest.TextTestRunner(stream=f,verbosity=2)#     runner.run(suite1)# print(f'{py_name}测试完成!')print('下面')

test02.py

print(111)classtest02(unittest.TestCase):defsetUp(self)->None:print('开始')deftearDown(self)->None:print('结束')deftest_01(self):print('第一')deftest_02(self):print('第二')# suite1 = unittest.TestSuite()# suite1.addTest(test02('test_01'))# suite1.addTest(test02('test_02'))# with open(file=report_file,mode='w',encoding='utf-8') as f:#     runner = unittest.TextTestRunner(stream=f,verbosity=2)#     runner.run(suite1)# print(f'{py_name}测试完成!')print(222)

main.py

classmain():def__init__(self):
        self.sn = devices_info.sn
        self.py_path = os.getcwd()
        self.py_name = os.path.basename(__file__).split('.')[0]
        self.report_path =r'D:\pythonProject\apk测试\report\base\heng'
        self.report_file = os.path.join(self.py_path,f'{self.py_name}_result.txt')defget_testcase(self):
        suite = unittest.TestSuite()
        testcase = unittest.defaultTestLoader.discover(start_dir=self.py_path, pattern='test*.py')print(testcase)
        suite.addTests(testcase)return suite

    defrun_test(self):
        suite = self.get_testcase()withopen(file=self.report_file,mode='w')as f:
            runner = unittest.TextTestRunner(stream=f,verbosity=2)
            runner.run(suite)#事实证明只执行一次if __name__ =='__main__':
    run = main().run_test()

运行main.py

D:\Python310\python.exe D:/pythonProject/apk_test/debug/main_debug.py 
主
外面
111222
start...
fist
finish...
start...
second...
finish...
开始
第一
结束
开始
第二
结束

说明,python unittest执行会优先执行test文件的class外主程序,即打印“主、下面、111、222”,class外主程序执行完,才加载unittest里的测试内容。

如果test01.py 和 test02.py ,unittest.main()都写入的话,就会执行class外主程序一遍、unittest class内容执行一遍。

参考文章:https://blog.csdn.net/weixin_42976139/article/details/102726138


本文转载自: https://blog.csdn.net/qq_43540385/article/details/127324303
版权归原作者 古墙白 所有, 如有侵权,请联系我们删除。

“unittest的运行方式”的评论:

还没有评论