基于python的自动化测试框架:
- unittest? (白盒单元测试)
- pytest(白盒单元测试)
- robotframework?(系统测试)
pytest 可以用来做 系统测试 的自动化, 它的特点有
pytest测试用例
class Test_错误密码:
def test_C001001(self):
print('\n用例C001001')
assert 1 == 1
def test_C001002(self):
print('\n用例C001002')
assert 2 == 2
def test_C001003(self):
print('\n用例C001003')
assert 3 == 2
(1)要求编写测试用例代码文件 必须以 test_ 开头,或者以 _test 结尾
(2)如果我们把测试用例存放在类中, 类名必须以?Test ?为前缀的?类 ?,用例对应的方法必须以?test ?为前缀的方法
(3)测试用例代码执行命令:pytest
- 如果我们希望 显示测试代码中print的内容,因为这些打印语句在调试代码时很有用,可以加上命令行参数 -s
pytest -s
- 如果我们希望得到更详细的执行信息,包括每个测试类、测试函数的名字,可以加上参数 -v,这个参数可以和 -s 合并为 -sv
pytest -sv
(4)产生测试报告
????????安装pytest-html插件
pip install pytest-html
????????产生报告
pytest cases --html=report.html --self-contained-html
初始化清除
模块级别 ?的初始化、清除 分别 在整个模块的测试用例 执行前后执行,并且?只会执行1次 ?
def setup_module():
print('\n *** 初始化-模块 ***')
def teardown_module():
print('\n *** 清除-模块 ***')
class Test_错误密码:
def test_C001001(self):
print('\n用例C001001')
assert 1 == 1
def test_C001002(self):
print('\n用例C001002')
assert 2 == 2
def test_C001003(self):
print('\n用例C001003')
assert 3 == 2
class Test_错误密码2:
def test_C001021(self):
print('\n用例C001021')
assert 1 == 1
def test_C001022(self):
print('\n用例C001022')
assert 2 == 2
执行命令?pytest cases -s ?,运行结果如下
collected 5 items
cases\登录\test_错误登录.py
*** 初始化-模块 ***
用例C001001
.
用例C001002
.
用例C001003
F
用例C001021
.
用例C001022
.
*** 清除-模块 ***
类级别 ?的初始化、清除 分别 在整个类的测试用例 执行前后执行,并且?只会执行1次
def setup_module():
print('\n *** 初始化-模块 ***')
def teardown_module():
print('\n *** 清除-模块 ***')
class Test_错误密码:
@classmethod
def setup_class(cls):
print('\n === 初始化-类 ===')
@classmethod
def teardown_class(cls):
print('\n === 清除 - 类 ===')
def test_C001001(self):
print('\n用例C001001')
assert 1 == 1
def test_C001002(self):
print('\n用例C001002')
assert 2 == 2
def test_C001003(self):
print('\n用例C001003')
assert 3 == 2
class Test_错误密码2:
def test_C001021(self):
print('\n用例C001021')
assert 1 == 1
def test_C001022(self):
print('\n用例C001022')
assert 2 == 2
执行命令?pytest cases -s ?,运行结果如下
collected 5 items
cases\登录\test_错误登录.py
*** 初始化-模块 ***
=== 初始化-类 ===
用例C001001
.
用例C001002
.
用例C001003
F
=== 清除 - 类 ===
用例C001021
.
用例C001022
.
*** 清除-模块 ***
方法级别 的初始化、清除 分别 在类的 每个测试方法 执行前后执行,并且?每个用例分别执行1次
def setup_module():
print('\n *** 初始化-模块 ***')
def teardown_module():
print('\n *** 清除-模块 ***')
class Test_错误密码:
@classmethod
def setup_class(cls):
print('\n === 初始化-类 ===')
@classmethod
def teardown_class(cls):
print('\n === 清除 - 类 ===')
def setup_method(self):
print('\n --- 初始化-方法 ---')
def teardown_method(self):
print('\n --- 清除 -方法 ---')
def test_C001001(self):
print('\n用例C001001')
assert 1 == 1
def test_C001002(self):
print('\n用例C001002')
assert 2 == 2
def test_C001003(self):
print('\n用例C001003')
assert 3 == 2
class Test_错误密码2:
def test_C001021(self):
print('\n用例C001021')
assert 1 == 1
def test_C001022(self):
print('\n用例C001022')
assert 2 == 2
执行命令?pytest cases -s ?,运行结果如下
collected 5 items
cases\登录\test_错误登录.py
*** 初始化-模块 ***
=== 初始化-类 ===
--- 初始化-方法 ---
用例C001001
.
--- 清除 -方法 ---
--- 初始化-方法 ---
用例C001002
.
--- 清除 -方法 ---
--- 初始化-方法 ---
用例C001003
F
--- 清除 -方法 ---
=== 清除 - 类 ===
用例C001021
.
用例C001022
.
*** 清除-模块 ***
挑选测试用例执行
pytest cases\登录\test_错误登录.py
????????指定一个目录
pytest cases
????????指定多个目录
pytest cases1 cases2\登录
pytest cases\登录\test_错误登录.py::Test_错误密码
pytest cases\登录\test_错误登录.py::Test_错误密码::test_C001001
pytest -k C001001 -s
注意,-k 后面的名字
-
可以是测试函数的名字,可以是类的名字,可以是模块文件名,可以是目录的名字 -
是大小写敏感的 -
不一定要完整,只要能有部分匹配上就行 -
可以用 not 表示选择名字中不包含,比如 pytest -k "not C001001" -s
-
可以用 and 表示选择名字同时包含多个关键字,比如 pytest -k "错 and 密码2" -s
-
可以用 or 表示选择名字 包含指定关键字之一即可,比如 pytest -k "错 or 密码2" -s
数据驱动
如果有一批测试用例,具有?相同的测试步骤 ?,只是?测试参数数据不同 ?。
自动化测试时,把测试数据从用例代码中?分离 ?开来,以后增加新的测试用例,只需要修改数据。
class Test_错误登录:
@pytest.mark.parametrize('username, password, expectedalert', [
(None, '88888888', '请输入用户名'),
('byhy', None, '请输入密码'),
('byh', '88888888', '登录失败 : 用户名或者密码错误'),
('byhy', '8888888', '登录失败 : 用户名或者密码错误'),
('byhy', '888888888', '登录失败 : 用户名或者密码错误'),
]
)
def test_UI_0001_0005(self, username, password, expectedalert):
alertText = loginAndCheck(username, password)
assert alertText == expectedalert
用例?UI-0001 ?到?UI-0005 ?这5个登录的测试用例,共同的特点是,它们测试步骤是一模一样的,只是输入的数据(用户名、密码)不同,要检查的输出数据(错误提示)不同。
|