1、用例编写规则
unittest提供了testcases测试用例,testsuintes测试套件,testfixtures测试固件或夹具,testloader测试加载器,testrunner测试运行器,必须遵守以下规则:
1)测试文件必须先导入 import unittest
2)测试类必须继承 unittest.TestCase
3)测试方法必须以test开头
pytest:python的第三方测试框架,基于unittest的扩展框架,必须遵守以下规则:
1)测试文件必须以test_开头或以_test结尾
2)测试类必须以Test开头
3)测试方法必须以test开头
2、用例的前置和后置
unittest:
setUp/tearDown: 在每个用例之前或之后执行一次,打开浏览器,加载网页/关闭网页
setUpClass/tearDownClass:在每个类运行之前或之后执行一次,创建数据库连接,创建日志对象/关闭数据库连接,销毁日志对象
setUpModule/tearDownModule:在每个模块之前或之后执行一次
pytest:
方法级:
setup_mothod/teardown_mothod:在方法之前和之后
setup/teardown
函数级:
setup_function/teardown_function:在函数之前和之后
类级:
setup_class/teardown_classn:在类之前和之后
模块级:
setup_module/teardown_module:在模块之前和之后
还有:还可以在函数之前加@pytest.fixture()
3、断言
unittest: assertTure, assertEqual, assertIn
pytest: assert
4、报告
unittest: htmltestrunner
pytest:插件pytest-HTML, allure
5、失败重跑
unittest: 没有
pytest:pytest-returnfailures
6、数据驱动
unittest: ddt
pytest:@pytest.mark.parametrize装饰器
7、用例分类执行
unittest:默认执行所有,也可以通过testsuite来执行部分用例,或者-k参数
pytest: @pytest.mark
unittest主要做了什么
1、测试发现:从多个py文件中收集并且加载测试用例
2、测试执行:将测试用例按照一定的顺序和条件执行并生成结果
3、测试判断:通过断言去判断结果是否正确
4、测试报告:统计测试进度,通过率,生成报告
unittest重要组件
1、TestCase
2、TestSuite
3、TestFixture
4、TestLoader
5、TestRunner
TestCase用法
import unittest
class TestUnittest(unittest.TestCase):
def test_one(self):
print("unittest测试1")
def test_two(self):
print("unittest测试2")
1)使用unittest命令行的方式运行:
python -m unittest 模块名.类名 -v(详细信息)
python -m 以脚本的方式运行一个模块
python -v 更加详细的输出结果
python -k 匹配模式,通配符: -k *_one,字符串:-l one
集成Jenkins的时候使用,为什么?所有的命令行的方式都是非GUI的方式。
2)使用unittest.main(),以模块的方式运行
配置pycharm的环境或者使用python 模块名.py
读懂执行结果
.成功
F失败
E错误
S跳过
用例执行顺序
按照ASCII码规则:【0-9 A-Z a-z】A=65 a=97
框架底层原理
module='__main__', //测试用例所在的路径_main_表示当前模块 defaultTest=None, //待测用例的名称,默认所有 argv=None, //接收外部的参数 testRunner=None, //测试运行器,TextTestRunner testLoader=loader.defaultTestLoader, //指定使用默认的测试用例加载器 exit=True, //是否在测试完成之后结束python程序 verbosity=1, //类似于命令行-v,0啥都没有,1有个点,2详细信息 failfast=None, catchbreak=None, buffer=None, warnings=None, *, tb_locals=False
只运行部分用例:
suite= unittest.TestSuite()
suite.addTest(TestUnittest("test_one"))
unittest.main(defaultTest='suite')
#unittest.TextTestRunner().run(suite)
addTests:加载多个用例
testcases = unittest.defaultTestLoader.discover(start_dir=os.getcwd(), pattern='*.py)
suite= unittest.TestSuite()
suite.addTests(testcases)
# unittest.main(defaultTest='suite')
unittest.TextTestRunner().run(suite)
跳过测试用例
@unittest.skip(“理由”)
@unittest.skipIf(“条件”,“理由”)
@unittest.skipUnless
(“条件”,“理由”)
断言
assertEqual(a,b) //断言a==b
assertNotEqual(a,b) //断言a!=b
assertTure(a) //断言a为真
assertFalse(a) //断言a为假
assertIn(a,b) //断言a在b里面
assertNotIn(a,b) //断言a不在b里面
批量生成HTML报告
HTMLTestRunner.py python\Lib