博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
selenium~使用unittest测试框架,批量执行测试脚本,addTest、makeSuite、TestLoader、discover的使用
阅读量:4052 次
发布时间:2019-05-25

本文共 5271 字,大约阅读时间需要 17 分钟。

文章目录

unittest框架解析

  • unittest 是python 的单元测试框架, 在python 的官方文档中,对unittest有详细的介绍,想更深一步研究的同学可以到https://www.python.org/doc/ 去了解。
  • unittest 单元测试提供了创建测试用例,测试套件以及批量执行的方案, unittest 在安装pyhton 以后就直接自带了,直接import unittest 就可以使用。
  • 作为单元测试的框架, unittest 也是可以对程序最小模块的一种敏捷化的测试。在自动化测试中,我们虽然不需要做白盒测试,但是必须需要知道所使用语言的单元测试框架。
  • 利用单元测试框架,创建一个类,该类继承unittest的TestCase,这样可以把每个case看成是一个最小的单元, 由测试容器组织起来,到时候直接执行,同时引入测试报告.

准备工作

  • 敲好来个测试类, 继承unittest.TestCase
  • test1.py文件
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.ui import Selectfrom selenium.common.exceptions import NoSuchElementExceptionfrom selenium.common.exceptions import NoAlertPresentExceptionimport unittestimport timeimport reclass TestBaiDu1(unittest.TestCase):    # setUp用来初始化环境 每执行一个测试方法都会先执行这个方法    # self表示这个类的实例    def setUp(self) -> None:        self.driver = webdriver.Chrome()        self.driver.implicitly_wait(30)        self.base_url = "http://www.baidu.com"    # 测试用例必须用test开头    def test_baiDuSearch(self):        driver = self.driver        driver.get(self.base_url + "/")        driver.find_element_by_id("kw").click()        driver.find_element_by_id("kw").clear()        # u表示字符编码        driver.find_element_by_id("kw").send_keys(u"测试")        driver.find_element_by_id("su").click()        driver.find_element_by_id("su").click()    def test_hao(self):        driver = self.driver        driver.get(self.base_url + "/")        driver.find_element_by_link_text("hao123").click()    # 清除环境工作 每执行完一个测试用例都会执行这个    def tearDown(self) -> None:        time.sleep(3)        self.driver.close()if __name__ == "__main__":    # 执行测试用例    unittest.main()
  • test2.py文件
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.ui import Selectfrom selenium.common.exceptions import NoSuchElementExceptionfrom selenium.common.exceptions import NoAlertPresentExceptionimport unittest, time, reclass TestBaiDu2(unittest.TestCase):    def setUp(self) -> None:        self.driver = webdriver.Chrome()        self.driver.implicitly_wait(30)        self.base_url = "http://www.baidu.com"    def test_baiDuSearch(self):        driver = self.driver        driver.get(self.base_url + "/")        driver.find_element_by_id("kw").click()        driver.find_element_by_id("kw").clear()        driver.find_element_by_id("kw").send_keys(u"詹姆斯")        driver.find_element_by_id("su").click()        driver.find_element_by_id("su").click()    def tearDown(self) -> None:        time.sleep(3)        self.driver.close()if __name__ == "__main__":    unittest.main()

addTest() 的应用

  • 当有多个或者几百测试用例的时候, 这样就需要一个测试容器( 测试套件) ,把测试用例放在该容器中进行执行,unittest 模块中提供了TestSuite 类来生成测试套件,使用该类的构造函数可以生成一个测试套件的实例,该类提供了addTest来把每个测试用例加入到测试套件中。
  • AddTest.py文件
import unittest, csvimport test1, test2import os, sysimport time# 手工添加测试用例到套件def createSuite():    # 初始化一个测试套件    suite = unittest.TestSuite()    # 将测试用例添加到测试套件中    suite.addTest(test1.TestBaiDu1("test_baiDuSearch"))    suite.addTest(test1.TestBaiDu1("test_hao"))    suite.addTest(test2.TestBaiDu2("test_baiDuSearch"))    return suiteif __name__ == "__main__":    suite = createSuite()    # 2表示显示详细信息    runner = unittest.TextTestRunner(verbosity=2)    # 执行测试套件    runner.run(suite)

makeSuite()和TestLoader()的应用

  • 上述addTest有一个不方便的就是如果一个类有十几个甚至几十个测试用例, 如果每一次多add一次的话就太麻烦了, 所以就有makeSuite()和TestLoader()他们会自动加载你输入的类中的所有此时用例

makeSuite()

  • 在unittest 框架中提供了makeSuite() 的方法,makeSuite可以实现把测试用例类内所有的测试case组成的测试套件TestSuite ,unittest 调用makeSuite的时候,只需要把测试类名称传入即可。
  • makeSuitTest.py文件
import unittest, csvimport os, sysimport timeimport test1import test2# 手工添加案例到套件,def createSuite():    suite = unittest.TestSuite()    # 将测试用例加入到测试容器(套件)中    suite.addTest(unittest.makeSuite(test1.TestBaiDu1))    suite.addTest(unittest.makeSuite(test2.TestBaiDu2))    return suiteif __name__ == "__main__":    suite = createSuite()    runner = unittest.TextTestRunner(verbosity=2)    runner.run(suite)

TestLoader()

  • TestLoader 用于创建类和模块的测试套件,一般的情况下,TestLoader().loadTestsFromTestCase(TestClass)来加载测试类。
  • TestLoaderTest.py文件
import unittest, csvimport os, sysimport timeimport test1import test2# 手工添加案例到套件,def createSuite():    suite = unittest.TestSuite()    # 将测试用例加入到测试容器(套件)中    suite1 = unittest.TestLoader().loadTestsFromTestCase(test1.TestBaiDu1)    suite2 = unittest.TestLoader().loadTestsFromTestCase(test2.TestBaiDu2)    suite = unittest.TestSuite([suite1, suite2])    return suiteif __name__ == "__main__":    suite = createSuite()    runner = unittest.TextTestRunner(verbosity=2)    runner.run(suite)

discover()的应用

  • discover 是通过递归的方式到其子目录中从指定的目录开始, 找到所有测试模块并返回一个包含它们对象的TestSuite ,然后进行加载与模式匹配唯一的测试文件,discover 参数分别为
    discover(dir,pattern,top_level_dir=None)
  • TestDiscover.py文件
import unittest, csvimport os, sysimport time# 手工添加案例到套件,def createSuite():    # 第一个参数是扫描的路径 ../表示回到父路径, 然后递归扫描20201020这个文件下的文件    # 第二个参数进行匹配test开头的.py结尾的文件, 如果匹配就加载里面的内容    # 第三个参数表示测试模块的顶层目录,如果没有顶层目录,默认为None;一般都是为None    discover = unittest.defaultTestLoader.discover('../20201020', pattern='test*.py', top_level_dir=None)    print(discover)    return discoverif __name__ == "__main__":    suite = createSuite()    runner = unittest.TextTestRunner(verbosity=2)    runner.run(suite)

转载地址:http://ojsci.baihongyu.com/

你可能感兴趣的文章
分布式应用开发相关的面试题收集
查看>>
简单理解Socket及TCP/IP、Http、Socket的区别
查看>>
利用HTTP Cache来优化网站
查看>>
利用负载均衡优化和加速HTTP应用
查看>>
消息队列设计精要
查看>>
分布式缓存负载均衡负载均衡的缓存处理:虚拟节点对一致性hash的改进
查看>>
分布式存储系统设计(1)—— 系统架构
查看>>
MySQL数据库的高可用方案总结
查看>>
常用排序算法总结(一) 比较算法总结
查看>>
SSH原理与运用
查看>>
SIGN UP BEC2
查看>>
S3C2440中对LED驱动电路的理解
查看>>
《天亮了》韩红
查看>>
Windows CE下USB摄像头驱动开发(以OV511为例,附带全部源代码以及讲解) [转]
查看>>
出现( linker command failed with exit code 1)错误总结
查看>>
iOS开发中一些常见的并行处理
查看>>
iOS获取手机的Mac地址
查看>>
ios7.1发布企业证书测试包的问题
查看>>
如何自定义iOS中的控件
查看>>
iOS 开发百问
查看>>