zoukankan      html  css  js  c++  java
  • Selenium:集成测试报告

    参考内容:虫师:《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:安装工具pythonchromedriver.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:安装工具pythonchromedriver.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:请忽略报错,这里主要是举个例子,具体的实践请以实际业务场景进行调整。。。

     
  • 相关阅读:
    android之APN
    Simple XML
    Retrofit – Java(Android) 的REST 接口封装类库
    Android 删除短信
    解决android:background背景图片被拉伸问题
    人分三等,你是哪一等?
    将android中的sample例子到eclipse中
    linux内存管理
    Android 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚(转)
    使用maven创建web项目
  • 原文地址:https://www.cnblogs.com/imyalost/p/7368414.html
Copyright © 2011-2022 走看看