Selenium:集成测试报告

本文介绍了一种利用Selenium进行自动化测试的方法,通过将测试用例按功能拆分到不同文件,提高代码可维护性。并通过TestLoader和discover方法简化测试用例的加载过程,最后实现了测试报告的自动生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考内容:虫师:《selenium2自动化测试实战——基于python语言》

PS:书中的代码,只能做参考,最好还是自己码一码,不一定照搬就全是对的,实践出真知啊,踩了很多坑的说。。。

随着软件不断迭代功能越来越多,对应的测试用例也会呈指数增长。一个实现几十个功能的项目,对应的用例可能有上百个甚至更多,如果全部集成在一个文件中,那么这个文件就很臃肿且维护麻烦。

一个很好的方法就是将这些用例按照功能类型进行拆分,分散到不同测试文件中,即一个项目,对应多个分支。

 

一、分拆后的实现代码

1、testbaidu.py

 1 from selenium import webdriver
 2 import unittest
 3 import time
 4 
 5 class MyTest(unittest.TestCase):
 6     def setUp(self):
 7         self.driver = webdriver.Chrome("F:\安装工具\python\chromedriver.exe")
 8         self.driver.maximize_window()
 9         self.driver.implicitly.wait(10)
10         self.base_url = "http://www.baidu.com"
11 
12     def test_baidu(self):
13         driver = self.driver
14         driver.get(self.base_url + "/")
15         driver.find_element_by_id("kw").clear()
16         driver.find_element_by_id("kw").send_key("unittest")
17         driver.find_element_by_id("su").click()
18         time.sleep(2)
19         title = assertEqual(title,"unittest_百度搜索")
20 
21     def tearDown(self):
22         self.driver.quit()

 

2、testyoudao.py

 1 from selenium import webdriver
 2 import unittest
 3 import time
 4 
 5 class Mytest(unittest.TestCase):
 6 
 7     def setUp(self):
 8         self.driver = webdriver.Chrome("F:\安装工具\python\chromedriver.exe")
 9         self.driver.maximize_window()
10         self.driver.implicitly_wait(10)
11         self.base_url = "http://www.youdao.com"
12     
13     def test_youdao(self):
14         driver = self.driver
15         driver.get(self.base_url + "/")
16         driver.find_element_by_id("query").clear()
17         driver.find_element_by_id("query").send.keys("webdriver")
18         driver.find_element_by_id("qb").click()
19         time.sleep(2)
20         title = driver.title
21         self.assertEqual(title, "webdriver - 有道搜索")
22 
23     def tearDown(self):
24         self.driver.close()

 

二、创建用于执行所有用例的ALL_HTMLtest.py文件

1、ALL_HTMLtest.py

 1 # coding=utf-8
 2 import unittest
 3 import time
 4 from HTMLTestRunner import HTMLTestRunner
 5 
 6 # 加载用例testbaidu,testyoudao
 7 import testbaidu
 8 import testyoudao
 9 
10 # 将测试用例添加到测试集中
11 suite = unittest.TestSuite()
12 
13 suite.addTest(testbaidu.MyTest("test_baidu"))
14 suite.addTest(testyoudao.Mytest("test_youdao"))
15 
16 if __name__ == '__main__':
17     # 执行测试
18     runner = unittest.TextTestRunner()
19     runner.run(suite)

拆分带来的好处显而易见,可以根据不同功能创建不同的测试文件,甚至不同的目录,还可以将不同的小功能划分为不同的测试类,在类下编写测试用例,整体结构更加清晰。

但依然存在缺陷(当用例达到成百上千条时,在ALL_HTMLtest.py中addTest()添加测试用例就变得很麻烦)。。。

 

2、TestLoader类

unittest单元测试框架提供了TestLoader类,该类负责根据各种标准加载测试用例,并将它们返回给测试套件。

unittest提供了可以共享的defaultTestLoader类,可以使用其子类和方法创建实例,discover()方法就是其中之一。

discover(start_dir, pattern='test*.py', top_level_dir=None)

找到指定目录下的所有测试模块,并递归查找子目录下的测试模块,只有匹配到文件名才能被加载,如果启动的不是顶层目录,则顶层目录必须单独指定。

start_dir:要测试的模块名或测试用例目录;

pattern='test*.py':表示用例文件名的匹配原则,下面的例子中匹配文件名为以“test”开头的“.py”文件,星号“*”表示任意多个字符;

top_level_dir=None:测试模块的顶层目录,如果没有顶层目录,默认为None;

 1 # coding=utf_8
 2 import unittest
 3 from unittest import defaultTestLoader
 4 # 定义测试用例的目录为当前目录
 5 test_dir = './'
 6 discover = unittest.defaultTestLoader.discover(test_dir,pattern='test*.py') 
 7 
 8 if __name__ == '__main__':
 9     runner = unittest.TextTestRunner()
10     runner.run(discover)

 

三、集成测试报告

HTMLTestRunner目前只针对单个测试文件生成测试报告,因此需要对上面的代码进行修改,修改后内容如下:
 1 # coding=utf_8
 2 import unittest
 3 import time
 4 from unittest import defaultTestLoader
 5 from HTMLTestRunner import HTMLTestRunner
 6 
 7 # 定义测试用例的目录为当前目录
 8 test_dir = './report'
 9 discover = unittest.defaultTestLoader.discover(test_dir,pattern='test*.py') 
10 
11 if __name__ == '__main__':
12     now = time.strftime("%Y-%m-%d %H_%M_%S")
13     filename = test_dir + '/' + now + 'result.html'
14     fp = open(filename, 'wb')
15     runner = HTMLTestRunner(stream=fp,title='集成测试报告demo',description= '用例执行情况:')
16     runner.run(discover)
17     fp.close()

 执行后,结果如下:

PS:请忽略报错,这里主要是举个例子,具体的实践请以实际业务场景进行调整。。。

 

 
集成测试报告 版本:V2.0 文 档 编 号 保 密 等 级 作 者 最后修改日期 审 核 人 最后审批日期 批 准 人 最后批准日期 修订记录 日期 版本 修订说明 修订人 目 录 1 目的 1 2 输入文档 1 3 测试概况 1 3.1 测试环境 1 3.2 测试类型 1 3.3 测试用例执行情况 1 3.4 测试实际进度和工作量 1 4 集成报告 1 5 测试数据分析 2 5.1 测试用例执行分析 2 5.2 测试需求覆盖分析 2 5.3 测试用例有效性分析 2 5.4 测试有效性分析 3 5.5 测试效率分析 3 5.6 缺陷收敛趋势分析 3 5.7 缺陷分布分析 4 5.8 遗留缺陷 5 6 测试结论及产品质量分析 6 7 缺陷清单 6 目的 [这部分描述文档内容简要。例如本文档描述XXX项目XX集成测试测试分析报告] 输入文档 [说明编写此报告的输入文档(包括:信息、数据、结果等)]。 如,需求、设计、测试用例、手册以及其他项目文档都是范围内可参考的;测试使用的行业指标、公司规范和质量手册等等 测试概况 [描述测试开始时间、结束时间,执行人。] 测试环境 测试类型 测试用例执行情况 [描述一共设计了多少测试用例,执行了多少测试用例,一共发现了多少缺陷(按照类型),修复多少缺陷,遗留多少缺陷] 测试实际进度和工作量 [记录实际测试活动的起始和结束时间,并进行工作量统计] 测试任务 实际开始时间 实际结束时间 计划工作量 实际工作量 合计工作量 集成报告 [描述持续集成实现步骤] [描述各接口或各子系统的集成步骤] 测试数据分析 测试用例执行分析 [描述集成测试活动结束后,测试用例的执行结果,比如:测试用例总数,通过百分比,失败用例数等] 测试需求覆盖分析 [描述集成测试活动是否覆盖了测试需求或者软件需求] 测试用例有效性分析 【统计实际的测试用例有效性数据,分析与计划值产生偏差的原因】 计划的测试用例有效性 实际的测试用例有效性 偏差分析 【统计每个测试用例发现的缺陷数,将发现缺陷数最多的前10个测试用例和发现缺陷数最少的前10个测试用例填写到下面表格中,并分析测试用例发现缺陷数多少的原因。】 序号 发现缺陷数最多的测试用例(按发现的缺陷数从多到少进行排序) 发现的缺陷个数 发现缺陷数最少的测试用例(按发现的缺陷数从少到多进行排序) 发现的缺陷个数 1 2 3 4 5 6 7 8 9 10 原因分析: 测试有效性分析 【统计实际发现的缺陷数据,分析与计划值产生偏差的原因,结合《项目量化管理计划》定义的阈值,确定是否采取相关措施】 计划发现缺陷数 致命 严重 一般 实际发现缺陷数 偏差分析 对策或调整措施 测试效率分析 【计算实际测试效率数据,分析与计划值产生偏差的原因,结合《项目量化管理计划》定义的阈值,确定是否采取相关措施】 计划测试效率(个/人日) 控制上限 控制下限 实际测试效率(个/人日) 偏差分析 对策或调整措施 缺陷收敛趋势分析 [用示每轮系统测试发现的缺陷数量,并从图示中分析缺陷的收敛情况。]图示如下所示: 缺陷分布分析 [统计各个模块的缺陷密度,按照缺陷密度由大到小进行排序,对排序在前面20%的模块,分析引起其缺陷的原因。] 致命缺陷分布分析: 模块 缺陷数 缺陷密度(个/KLOC) 原因分析 模块1 0.22 模块2 0.15 模块3 0.09 模块4 0.06 模块5 0.03 模块6 0.00 模块7 0.00 模块8 0.00 严重缺陷分布分析: 模块 缺陷数 缺陷密度(个/KLOC) 原因分析 模块1 2.22 模块2 1.91 模块3 1.35 模块4 1.02 模块5 0.58 模块6 0.51 模块7 0.36 模块8 0.02 一般缺陷分布分析: 模块 缺陷数 缺陷密度(个/KLOC[模块的代码行在哪里有描述]) 原因分析 模块1 5.22 模块2 3.51 模块3 3.05 模块4 2.02 模块5 1.28 模块6 0.91 模块7 0.56 模块8 0.17 微小缺陷分布分析: 模块 缺陷数 缺陷密度(个/KLOC) 原因分析 模块1 模块2 模块3 模块4 模块5 模块6 模块7 模块8 遗留缺陷 [按照严重度统计各严重等级遗留缺陷的缺陷密度。] 严重度 缺陷数 缺陷密度(个/KLOC) 致命 严重 一般 微小 建议 [描述集成测试活动结束后,还遗留有那些缺陷未解决,以列表形式填写在这里] 测试结论及产品质量分析 [对被测对象的质量进行综合评价,并给出最终的测试结论:即测试活动是否满足要求,产品能否通过集成测试。] 缺陷清单 [缺陷清单以列表形式记录所有测试中发现的问题,要求记录所有问题的解决状态.主要内容:问题编号、问题描述、问题级别、问题类型、问题解决状态。缺陷列表可以从缺陷跟踪系统中导出,若缺陷记录少于50条,可直接粘贴在这里,否则,就以附件形式粘贴在这里。]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值