引言
python小程序之测试报告
文章目录
- 引言
- 一、测试报告
- 1.1 概念
- 1.1.1 使用Pytest和Allure生成测试报告
- 1.1.2 使用unittest和HTMLTestRunner生成测试报告
- 1.1.3 总结
- 1.2 题目
- 1.3 代码
- 1.3 代码解释
- 二、思考
一、测试报告
1.1 概念
python生成测试报告,常用的方法包括使用Pytest结合Allure工具,以及利用unittest框架配合HTMLTestRunner等
1.1.1 使用Pytest和Allure生成测试报告
前提准备:
- 安装Pytest和Allure:
pip install pytest allure-pytest
。
步骤:
- 编写测试用例:使用Pytest的断言语句来验证代码的输出是否符合预期
- 运行Pytest并生成Allure报告:
- 运行命令:
pytest --alluredir=allure-results
。 - 该命令将执行所有测试用例,并将结果存储在
allure-results
目录中 - 同时,它还会生成一个Allure报告的HTML文件,可以在浏览器中查看
- 运行命令:
1.1.2 使用unittest和HTMLTestRunner生成测试报告
- 使用HTMLTestRunner生成HTML测试报告:
- HTMLTestRunner是
unittest
模块的一个扩展,可以用来生成网页版的测试报告 - 首先,需要下载HTMLTestRunner.py文件,并将其保存在Python安装路径下的lib文件夹或项目的子包中
- 在python代码中通过
import HTMLTestRunner
导入后即可使用 - 常用的参数包括
stream
(配置测试报告要保存的文件路径)、title
(测试报告标题)和description
(测试报告的描述信息)
- HTMLTestRunner是
- 使用BeautifulReport库生成测试报告:
- BeautifulReport是一个用于
unittest
自动化测试的可视化报告工具,它能将测试结果以美观、易于理解的方式呈现出来 - 您可以直接在Python代码中使用
import BeautifulReport
导入这个库,然后使用其提供的功能来生成测试报告
- BeautifulReport是一个用于
- 基本
unittest
用法:unittest
是python自带的一个单元测试框架,您可以使用它来组织、执行和生成测试报告- 创建一个继承自
unittest.TestCase
的类,并在其中定义以test
开头的方法来代表测试用例 - 执行测试时,可以使用
unittest.main()
函数来运行这些测试用例,并生成相应的报告
1.1.3 总结
以上方法均可用于python自动化测试中生成详细的测试报告,帮助更好地理解测试结果并进行缺陷跟踪
1.2 题目
如何生成一个可视化的测试报告
1.3 代码
import unittest
from HTMLTestRunner import HTMLTestRunner# 定义测试用例
class TestStringMethods(unittest.TestCase):def test_upper(self):self.assertEqual('foo'.upper(), 'FOO')def test_isupper(self):self.assertTrue('FOO'.isupper())self.assertFalse('Foo'.isupper())def test_split(self):s = 'hello world'self.assertEqual(s.split(), ['hello', 'world'])# 检查s.split fails when the separator is not a stringwith self.assertRaises(TypeError):s.split(3)# 构建测试套件
def suite():suite = unittest.TestSuite()suite.addTest(TestStringMethods('test_upper'))suite.addTest(TestStringMethods('test_isupper'))suite.addTest(TestStringMethods('test_split'))return suiteif __name__ == '__main__':# 运行测试套件并生成HTML报告with open('TestReport.html', 'wb') as report_file:runner = HTMLTestRunner(stream=report_file,title='Test Report',description='Example test report generated by HTMLTestRunner.')runner.run(suite())
输出结果:
测试报告:
1.3 代码解释
代码使用
unittest
框架和HTMLTestRunner
库来定义和运行测试用例,并生成一个HTML格式的测试报告
import unittest
from HTMLTestRunner import HTMLTestRunner
- 导入
unittest
模块,它提供了用于编写和运行测试的框架 - 导入
HTMLTestRunner
,这是一个第三方库,用于生成HTML格式的测试报告
# 定义测试用例
class TestStringMethods(unittest.TestCase):
- 定义一个名为
TestStringMethods
的类,它继承自unittest.TestCase
。这个类将包含测试用例
def test_upper(self):self.assertEqual('foo'.upper(), 'FOO')
- 定义一个名为
test_upper
的方法,用于测试字符串的upper()
方法。使用assertEqual
来断言'foo'.upper()
返回的值是否等于'FOO'
def test_isupper(self):self.assertTrue('FOO'.isupper())self.assertFalse('Foo'.isupper())
- 定义一个名为
test_isupper
的方法,用于测试字符串的isupper()
方法。第一个断言检查'FOO'.isupper()
是否返回True
,第二个断言检查'Foo'.isupper()
是否返回False
def test_split(self):s = 'hello world'self.assertEqual(s.split(), ['hello', 'world'])# 检查s.split fails when the separator is not a stringwith self.assertRaises(TypeError):s.split(3)
- 定义一个名为
test_split
的方法,用于测试字符串的split()
方法。第一个断言检查'hello world'.split()
是否返回['hello', 'world']
。第二个断言使用assertRaises
来检查当split()
的参数不是字符串时是否抛出TypeError
异常
# 构建测试套件
def suite():suite = unittest.TestSuite()suite.addTest(TestStringMethods('test_upper'))suite.addTest(TestStringMethods('test_isupper'))suite.addTest(TestStringMethods('test_split'))return suite
- 定义一个名为
suite
的函数,它创建一个unittest.TestSuite
实例,并将之前定义的测试用例添加到这个测试套件中
if __name__ == '__main__':# 运行测试套件并生成HTML报告with open('TestReport.html', 'wb') as report_file:runner = HTMLTestRunner(stream=report_file,title='Test Report',description='Example test report generated by HTMLTestRunner.')runner.run(suite())
二、思考
- 当这个脚本作为主程序运行时,它将打开一个名为
TestReport.html
的文件,以二进制写入模式 - 创建一个
HTMLTestRunner
实例,并传入文件流、报告标题和描述 - 使用
runner.run(suite())
运行测试套件,并将结果写入到之前打开的文件中,从而生成HTML测试报告