随着软件不断迭代,对应的功能也会越来越多,从而对应的测试用例也会呈指数增长。如果将全部的测试用例集成在一个文件中就会显得特别的臃肿而且维护成本也会很高。

一个很好的放大就是将这些测试yo你给里按照功能类型进行拆分,分散到不同测试文件中,即一个项目,对应多个分支。

1.testbaidu.py文件

 from selenium import webdriver
import unittest
import time class MyTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.maximize_window()
self.driver.implicitly.wait(10)
self.driver.get("https://www.baidu.com") def test_baidu(self):
driver = self.driver
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_key("unittest")
driver.find_element_by_id("su").click()
time.sleep(2)
title = self.assertEqual(title,"unittest_百度搜索") def tearDown(self):
self.driver.quit()

2.testyoudao.py文件

 from selenium import webdriver
import unittest
import time class MyTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.maximize_window()
self.driver.implicitly.wait(10)
self.driver.get("https://www.baidu.com") def test_baidu(self):
driver = self.driver
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_key("youdao")
driver.find_element_by_id("su").click()
time.sleep(2)
title = self.assertEqual(title, "youdao_百度搜索") def tearDown(self):
self.driver.quit()

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

1.ALL_HTMLtest.py

 # coding = utf -8
import unittest
import time
from HTMLTestRunner import HTMLTestRunner # 加载用例testbaidu,testyoudao
import testbaidu
import testyoudao # 将测试用例添加到测试集合中
suite = unittest.TestSuite()
suite.addTest(testbaidu.MyTest("test_baidu"))
suite.addTest(testyoudao.MyTest("test_youdao"))
if __name__ == '__main__':
# 执行测试
runner = unittest.TextTestRunner()
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;

注:discover()方法会自动根据测试目录(test_dir)匹配查找测试用例文件(test*.py),并将查找到的测试用例组装到测试套件中,因此可以直接通过run()方法执行discover,简化了测试用例的查找与执行。

 # coding=utf_8
import unittest
from unittest import defaultTestLoader
# 定义测试用例的目录为当前目录
test_dir = './'
discover = unittest.defaultTestLoader.discover(test_dir,pattern='test*.py') if __name__ == '__main__':
runner = unittest.TextTestRunner()
runner.run(discover)

三、集成测试报告

HTMLTestRunner目前只针对单个测试文件生成测试报告,因此需要对上面的代码进行修改,修改后的内容如下:

# coding=utf-8
import unittest
import time
from unittest import defaultTestLoader
from HTMLTestRunner import HTMLTestRunner # 定义测试用例的目录为当前目录
test_dir = './test_case'
discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py') #测试case所放的位置在test_dir下面下类似文件名为test的。py文件
if __name__ == "__main__":
now = time.strftime("%Y-%m-%d-%H-%M-%S")
filename = test_dir + '/' + now + 'result.html'
fp = open(filename, 'wb')
runner = HTMLTestRunner(stream=fp, title='集成测试报告', description='测试用例执行情况')
runner.run(discover)
fp.close()

注:

1.注意测试case所放的位置

Python +selenium之集成测试报告与unittest单元测试的更多相关文章

  1. Selenium+Python ---- 免登录、等待、unittest单元测试框架、PO模型

    1.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...

  2. Selenium:集成测试报告

    参考内容:虫师:<selenium2自动化测试实战——基于python语言> PS:书中的代码,只能做参考,最好还是自己码一码,不一定照搬就全是对的,实践出真知啊,踩了很多坑的说... 随 ...

  3. Python+selenium 2【测试报告】

    HTML报告 http://tungwaiyip.info/software/HTMLTestRunner.html   下载地址 这个扩展非常简单,只有一个HTMLTestRunner.py文件,选 ...

  4. Selenium实战(四)——unittest单元测试框架1

    Python中的单元测试框架包含:doctest.unittest.pyttest.nose等,使用unittest单元测试框架不需要自行定义断言失败的提示,并且当一个测试函数执行失败后,后面的测试函 ...

  5. python学习笔记(27)-unittest单元测试-测试用例

    单元测试 #单元测试 #unittest+接口 unittest python自带 pytest+jenkins+allure #接口测试的本质 就是测试类里面的函数 #单元测试的本质 测试函数 代码 ...

  6. Python+selenium自动化生成测试报告

    批量执行完用例后,生成的测试报告是文本形式的,不够直观,为了更好的展示测试报告,最好是生成HTML格式的. unittest里面是不能生成html格式报告的,需要导入一个第三方的模块:HTMLTest ...

  7. Selenium实战(四)——unittest单元测试2(断言方法+discover()多测试用例的执行)

    一.断言方法 方法 检查 版本 assertEqual(a,b) a==b   assertNotEqual(a,b) a!=b   assertTrue(x) bool(x) is True   a ...

  8. Python操作Excel,并结合unittest单元测试框架

    第一步:写Excel操作方法 excel_operate.py文件 from openpyxl import load_workbook #引入模块 class MyExcel: def __init ...

  9. Python+Selenium框架 ---自动化测试报告的生成

    本文来介绍如何生成自动化测试报告,前面文章尾部提到了利用HTMLTestRunner.py来生成自动化测试报告.关于HTMLTestRunner不过多介绍,只需要知道是一个能生成一个HTML格式的网页 ...

随机推荐

  1. hadoop2.6.0中自定义分割符

    最近在学习hadoop,用的hadoop2.6.0 然后在学习编写mapreduce程序时,发现默认对文件的输入是采用每行进行分割,下面来分析下改变这个分割方式的办法: 来看看默认是怎样实现的:

  2. sql中内联&nbsp;和外联&nbsp;区别

    sql中内联 和外联 区别 2007-05-15 17:37 这个概念一般看书不好理解.其实夜简单.有例子就简单了. 比如: 表A(主表) cardid username 16 aa 23 bb 25 ...

  3. eos表结构总结说明

    EOS6.0 WORKFLOW 表结构说明 流程定义表(WFProcessDefine) 名称 代码 描述 流程定义ID processDefID 主键 流程定义名称 processDefName 业 ...

  4. Google Analytics添加到网站

    把Google Analytics添加到网站的具体方式 https://developers.google.com/analytics/devguides/collection/analyticsjs ...

  5. js学习笔记3:with语句的使用

    with语句 with是ECMAScript规定的内容,主要用于设置代码在特定对象中的作用域. var sMessage = "hello"; with(sMessage) { c ...

  6. MVC笔记-模板页布局

    MVC分区后  要加上Ares下的主目录   如:@Html.ActionLink("这个帖子真奇葩", "HotIndex", "Prosceniu ...

  7. 将Angular6自己定义的模块发布成npm包

    创建自己的模块组件 1. ng new 一个工程 2. ng g m 创建模块 例如我这里的modules文件下创建header模块 3. ng g c modules/head 创建一个hear组件 ...

  8. VS 远程部署程序

    第1步 https://www.cnblogs.com/hydor/p/6604053.html 第2步 http://www.cnblogs.com/potential/p/3751426.html ...

  9. 散列表(Hash table)及其构造

    散列表(Hash table) 散列表,是根据关键码值(Key value)而直接进行访问的数据结构.它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数,存放记录 ...

  10. jQuery EasyUI/TopJUI创建日期输入框

    jQuery EasyUI/TopJUI创建日期输入框 日期时间输入框组件 HTML required:必填字段,默认为false:prompt:显示在输入框的提示性文字:pattern:日期格式 Y ...