1 安装
bash
pip install unittestreport -i https://pypi.tuna.tsinghua.edu.cn/simple
2 生成报告
python
# test_eip.py
import unittest
from unittestreport import TestRunner
class TestObject1(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_1_login(self):
print('login')
def test_2_get_user_info(self):
print('get user info')
if __name__ == '__main__':
test_case_list = unittest.TestLoader().loadTestsFromNames(['test_eip.TestObject1'])
s = unittest.TestSuite()
s.addTest(test_case_list)
runner = TestRunner(
s, # 测试套件 (必传)
filename='test_unittest', # 制定报告文件名
report_dir='./reports', # 制定存放报告路径
title='测试一下这个插件', # 指定测试报告标题
tester='匿名', # 测试人员的名称
desc='测试一下unittestreport', # 测试项目描述
templates=1 # 测试报告模板风格,目前只有2个 1 or 2
)
runner.run()
bash
# 执行过程
(venv) PS D:\pro\lucost> python .\test_eip.py
login
test_1_login (test_eip.TestObject1)执行------>【通过】
login
test_1_login (test_eip.TestObject1)执行------>【通过】
test_1_login (test_eip.TestObject1)执行------>【通过】
get user info
test_2_get_user_info (test_eip.TestObject1)执行------>【通过】
所有用例执行完毕,正在生成测试报告中......
测试报告已经生成,报告路径为:./reports\test_unittest.html
在当前目录下生产reports目录,目录下有两个文件

history.json 记录每次的结果,(最好执行前清理一下)

test_unittest.html,风格1的报告


测试报告风格2 科技感满满啊

3 失败重试
python
import unittest
from unittestreport import TestRunner, rerun
class TestObject1(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
# count 制定用力失败重新运行的次数
# interval 制定每次重新运行的时间间隔
@rerun(count=4, interval=2)
def test_1_login(self):
'''登录'''
print('login')
assert False
if __name__ == '__main__':
# unittest.main(verbosity=2)
test_case_list = unittest.TestLoader().loadTestsFromNames(['test_eip.TestObject1'])
s = unittest.TestSuite()
s.addTest(test_case_list)
runner = TestRunner(
s, # 测试套件 (必传)
filename='test_unittest', # 制定报告文件名
report_dir='./reports', # 制定存放报告路径
title='测试一下这个插件', # 指定测试报告标题
tester='匿名', # 测试人员的名称
desc='测试一下unittestreport', # 测试项目描述
templates=2 # 测试报告模板风格,目前只有2个 1 or 2
)
runner.run()
执行过程
bash
(venv) PS D:\pro\lucost> python .\test_eip.py
login
====用例执行失败===
Traceback (most recent call last):
File "D:\pro\venv\lib\site-packages\unittestreport\core\reRun.py", line 12, in run_count
func(*args, **kwargs)
File "D:\pro\lucost\test_eip.py", line 17, in test_1_login
assert False
AssertionError
==============开始第0次重运行=============
login
====用例执行失败===
Traceback (most recent call last):
File "D:\pro\venv\lib\site-packages\unittestreport\core\reRun.py", line 12, in run_count
func(*args, **kwargs)
File "D:\pro\lucost\test_eip.py", line 17, in test_1_login
assert False
AssertionError
==============开始第1次重运行=============
File "D:\pro\lucost\test_eip.py", line 17, in test_1_login
assert False
AssertionError
File "D:\pro\lucost\test_eip.py", line 17, in test_1_login
assert False
File "D:\pro\lucost\test_eip.py", line 17, in test_1_login
File "D:\pro\lucost\test_eip.py", line 17, in test_1_login
assert False
AssertionError
==============开始第1次重运行=============
login
====用例执行失败===
Traceback (most recent call last):
File "D:\pro\venv\lib\site-packages\unittestreport\core\reRun.py", line 12, in run_count
func(*args, **kwargs)
File "D:\pro\lucost\test_eip.py", line 17, in test_1_login
assert False
AssertionError
==============开始第2次重运行=============
login
====用例执行失败===
Traceback (most recent call last):
File "D:\pro\venv\lib\site-packages\unittestreport\core\reRun.py", line 12, in run_count
func(*args, **kwargs)
File "D:\pro\lucost\test_eip.py", line 17, in test_1_login
assert False
AssertionError
test_1_login (test_eip.TestObject1)执行------>【失败】
所有用例执行完毕,正在生成测试报告中......
测试报告已经生成,报告路径为:./reports\test_unittest.html

在当前测试的用例中同时配置。推荐这个方式
python
import unittest
from unittestreport import TestRunner, rerun
class TestObject1(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_1_login(self):
'''登录'''
print('login')
assert False
if __name__ == '__main__':
# unittest.main(verbosity=2)
test_case_list = unittest.TestLoader().loadTestsFromNames(['test_eip.TestObject1'])
s = unittest.TestSuite()
s.addTest(test_case_list)
runner = TestRunner(
s, # 测试套件 (必传)
filename='test_unittest', # 制定报告文件名
report_dir='./reports', # 制定存放报告路径
title='测试一下这个插件', # 指定测试报告标题
tester='匿名', # 测试人员的名称
desc='测试一下unittestreport', # 测试项目描述
templates=2 # 测试报告模板风格,目前只有2个 1 or 2
)
# runner.run()
runner.rerun_run(count=4, interval=3)
4 发送邮件
python
runner.run()
runner.send_email(
host='smtp.163.com',
port='465',
user='', # 发送端邮箱
password='', # smtp 授权的密码
to_addrs='' # 目标邮箱
)
5 数据驱动
案例1
python
import unittest
from unittestreport import TestRunner, rerun, ddt, list_data
cases = [
{'title': '用例1', 'data': '用例参数', 'expected': '预期结果'},
{'title': '用例2', 'data': '用例参数', 'expected': '预期结果'},
{'title': '用例3', 'data': '用例参数', 'expected': '预期结果'}
]
@ddt
class TestObject1(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
@list_data(cases)
def test_1_login(self, data):
'''登录'''
print(data)
assert True
bash
(venv) PS D:\pro\lucost> python .\test_eip.py
{'title': '用例1', 'data': '用例参数', 'expected': '预期结果'}
test_1_login_001 (test_eip.TestObject1)执行------>【通过】
{'title': '用例2', 'data': '用例参数', 'expected': '预期结果'}
test_1_login_002 (test_eip.TestObject1)执行------>【通过】
{'title': '用例3', 'data': '用例参数', 'expected': '预期结果'}
test_1_login_003 (test_eip.TestObject1)执行------>【通过】
所有用例执行完毕,正在生成测试报告中......
测试报告已经生成,报告路径为:./reports\test_unittest.html
案例2
json
[
{"title": "用例4", "data": "用例参数", "expected": "预期结果"},
{"title": "用例5", "data": "用例参数", "expected": "预期结果"},
{"title": "用例6", "data": "用例参数", "expected": "预期结果"}
]
python
import unittest
from unittestreport import TestRunner, rerun, ddt, json_data
@ddt
class TestObject1(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
@json_data('./data.json')
def test_1_login(self, data):
'''登录'''
print(data)
assert True
bash
{'title': '用例4', 'data': '用例参数', 'expected': '预期结果'}
test_1_login_001 (test_eip.TestObject1)执行------>【通过】
{'title': '用例5', 'data': '用例参数', 'expected': '预期结果'}
test_1_login_002 (test_eip.TestObject1)执行------>【通过】
{'title': '用例6', 'data': '用例参数', 'expected': '预期结果'}
test_1_login_003 (test_eip.TestObject1)执行------>【通过】
所有用例执行完毕,正在生成测试报告中......
测试报告已经生成,报告路径为:./reports\test_unittest.html

案例三
yaml
- title: 用例9
data: 用例参数
expected: 预期结果
- title: 用例10
data: 用例参数
expected: 预期结果
- title: 用例11
data: 用例参数
expected: 预期结果
python
import unittest
from unittestreport import TestRunner, rerun, ddt, yaml_data
@ddt
class TestObject1(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
@yaml_data('./ddd.yaml')
def test_1_login(self, data):
'''登录'''
print(data)
assert True
bash
(venv) PS D:\pro\lucost> python .\test_eip.py
{'title': '用例9', 'data': '用例参数', 'expected': '预期结果'}
test_1_login_001 (test_eip.TestObject1)执行------>【通过】
{'title': '用例10', 'data': '用例参数', 'expected': '预期结果'}
test_1_login_002 (test_eip.TestObject1)执行------>【通过】
{'title': '用例11', 'data': '用例参数', 'expected': '预期结果'}
test_1_login_003 (test_eip.TestObject1)执行------>【通过】
所有用例执行完毕,正在生成测试报告中......
测试报告已经生成,报告路径为:./reports\test_unittest.html
