生成测试报告工具-Unittest
unittest中最核心的四个概念是:test case, test suite, test runner, test fixture。
一个TestCase的实例就是一个测试用例。什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown)。元测试(unit test)的本质也就在这里,一个测试用例是一个完整的测试单元,通过运行这个测试单元,可以对某一个问题进行验证。
而多个测试用例集合在一起,就是TestSuite,而且TestSuite也可以嵌套TestSuite。
TestLoader是用来加载TestCase到TestSuite中的,其中有几个loadTestsFrom__()方法,就是从各个地方寻找TestCase,创建它们的实例,然后add到TestSuite中,再返回一个TestSuite实例。
TextTestRunner是来执行测试用例的,其中的run(test)会执行TestSuite/TestCase中的run(result)方法。
测试的结果会保存到TextTestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息。
而对一个测试用例环境的搭建和销毁,是一个fixture。
一个class继承了unittest.TestCase,便是一个测试用例,但如果其中有多个以 test 开头的方法,那么每有一个这样的方法,在load的时候便会生成一个TestCase实例,如:一个class中有四个test_xxx方法,最后在load到suite中时也有四个测试用例。
安装HTMLTestRunner
pip install html-testRunner
from selenium import webdriver import time import unittest import HTMLTestRunner class TestBaidu(unittest.TestCase): #继承testCase测试用例 # 单元测试 类名函数名文件名都必须以test开头,会自动识别 #override metherd 重写父类方法 setUp 初始化 teardown 结束时 # 没有值就是业务场景 带了输入的值就是单元测试 # 打开百度 #初始化 环境搭建(setUp) def setUp(self): self.db = webdriver.Chrome() #指定浏览器 self.db.get("https://www.baidu.com") #地址 self.db.maximize_window() #最大化窗口 # 百度搜索的操作 def test_search(self): db = self.db self.db.find_element_by_id("kw").send_keys("陈奕迅") #输入框 db.find_element_by_id("su").click() # 点击百度搜索 # 百度设置每页展示条数 def test_baidu_set(self): db = self.db db.get("http://baidu.com/gaoji/preferences.html") RequType = db.find_element_by_xpath("//select[@id='nr']") RequTypeOptionAll = RequType.find_elements_by_tag_name("option") for values in RequTypeOptionAll: print(values.get_attribute("value")) print(values.text) if "50" in values.text: values.click() break time.sleep(3) # 保存设置 db.find_element_by_xpath("/html/body/form/div/input").click() time.sleep(2) db.switch_to_alert().accept() # db.switch_to.alert #结束的时候用 #结束的时候 def tearDown(self): self.db.close() #程序入口 if __name__ == '__main__': # 创建测试用例容器 testlist = unittest.TestSuite() # 将用例添加到容器中 # testlist.addTest(类名("函数名")) testlist.addTest(TestBaidu("test_search")) testlist.addTest(TestBaidu("test_baidu_set")) #创建测试报告 #创建文件目录 file = "E:/baidu.html" #生成测试报告的时候用的是二进制文件wb rb wb 以二进制的方式进行读写文件 fle = open(file,"wb") #定义测试报告 runner = HTMLTestRunner.HTMLTestRunner( stream=fle, #stream定义报告所写入得内容 title='百度搜索测试报告', #itle为报告标题 description='用例执行情况' #description为报告得说明与描述 ) #将测试报告和测试容器关联在一起 runner.run(testlist) # test = TestBaidu() # test.setUp() # test.search() # # test.setUp() # test.test_baidu_set() # test.teardown()