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()