• unittest模块的几个属性
• unittest.TestCase:
• 所有测试用例类继承的基本类。
• unittest.main():
• 可以方便的将一个单元测试模块变为可直接运行的测试脚本,
main()方法使用TestLoader来搜索所有包含在该模块中以“test”
命名测试方法,开头的并自动执行他们。
• unittest.TestSuite():
• TestSuite()是用来创建测试套件的。
• unittest模块的几个属性
• unittest.TextTestRunner():
• 通过下面的run()方法来运行suite所组装的测试用例,入参为
suite测试套件。
• unittest.defaultTestLoader():
• 通过下面的discover()方法可自动根据测试目录匹配查找测试用
例文件,并将查找到的测试用例组装到测试套件
• unittest.skip():
• 装饰器,当运行用例时,有些用例可能不想执行等,可用装饰器
暂时屏蔽该条测试用例。
• Test Case类的几个重要属性:
• setUp():
• 用于测试用例执行前的初始化工作。如测试用例需要登录web,可以先
实例化浏览器。
• tearDown():
• 用于测试用例执行之后的善后工作。如关闭数据库连接。关闭浏览器。
• assert*():
• 一些断言方法:在执行测试用例的过程中,最终用例是否执行通过,是
通过判断测试得到的实际结果和预期结果是否相等决定的
unittest断言方法
• TestSuit类的几个重要属性:
• addTest():
• addTest()方法是将测试用例添加到测试套件中,如下方,是将
test_baidu模块下的BaiduTest类下的test_baidu测试用例添加到测试套件
• TextTestRunner类的重要属性:
• run():
• 是运行测试套件的测试用例,入参为suite测试套件
• 测试脚本设计的流程
• 1、设置文件编码
• 2、定义脚本说明
• 3、导入unittest模块
• 4、定义测试类,父类为unittest.TestCase。
• 5、定义setUp()方法用于测试用例执行前的初始化工作。
• 6、定义测试用例,以“test_”开头命名的方法
• 7、定义tearDown()方法用于测试用例执行之后的善后工作。
• 8、执行测试
• 8.1、使用unittest.main()方法并自动执行它们。
• 8.2、先构造测试集,实例化测试套件,将测试用例加载到测试 套件中,实例化TextTestRunner类,使用run()方法运行测试套件
• 8.3、构造测试集,使用unittest.defaultTestLoader.discover模块
发现所有测试脚本文件,顺序和8.1一样,按照顺序执行
下载HTMLTestRunner.py包
• 将HTMLTestRunner包放进./Python/lib目录下
from selenium import webdriver
#导入Selenium的web驱动包
import unittest
#导入unittest包
import time
#时间包
from HTMLTestRunner import HTMLTestRunner
#导入生成HTML测试报告的包
class Baidu(unittest.TestCase):
def test_baidu_search(self):
driver = webdriver.Firefox()
driver.get(http://www.baidu.com)
driver.find_element_by_id('kw').send_keys('selenium')
driver.find_element_by_id('su').click()
time.sleep(5)
driver.quit()
#生成单元测试流程
testunit = unittest.TestSuite()
#加载测试用例:
testunit.addTest(Baidu("test_baidu_search"))
#创建测试报告
fp=open('./result.html','wb')
runner = HTMLTestRunner(stream=fp,
title="百度搜索测试",
description="用例执行情况:“)
runner.run(testunit)
fp.close()
框架实战之测试报告的生成:
文件名:testVerydows.py
#encoding=UTF-8
#1.设置脚本文件的编码格式
'''
2.写明文档的基本情况
@time:2022-02-02
@author:chen
@description:
文档的解释案例
'''
#导入模块
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
from HTMLTestRunner import HTMLTestRunner
import unittest
#定义测试类,继承unittest.testcase
class baidu(unittest.TestCase):
def setUp(self):
self.dr = webdriver.Firefox()
self.dr.get("https://www.baidu.com")
sleep(2)
def testsousuo(self):
self.dr.find_element(By.link_TEXT,"新闻").click()
sleep(3)
self.dr.find_element(By.ID, "su").click()
sleep(5)
self.dr.switch_to.window(self.dr.window_handles[-1])
sleep(3)
self.dr.find_element(By.CLASS_NAME, "word").send_keys("乌克兰局势")
self.dr.find_element(By.CLASS_NAME, "btn").click()
sleep(4)
#设置断言,判断搜索乌克兰局势标题含有“乌克兰局势”等字符串
self.assertIn("乌克兰局势",self.dr.title)
def testprint(self):
print("运行了")
def terdowm(self):
self.de.quit()
文件名:main.py
import unittest
from HTMLTestRunner import HTMLTestRunner
#定义主方法
from test_jb.test_case import testVerydows
if __name__ == "__main__":
# 8.1 直接运行main,不建议
# unittest.main()
# 8.2 定义测试套件,添加测试脚本用例
testsuite = unittest.TestSuite()
# 添加测试用例脚本
testsuite.addTest(testVerydows.baidu("testsousuo"))
testsuite.addTest(testVerydows.baidu("testprint"))
# 测试报告导出
fp = open('D:\pythonProject\test_ss\test_jb\res\result.html', 'wb')
runner = HTMLTestRunner(stream=fp,
title="百度搜索测试",
description="用例执行情况:")
runner.run(testsuite)
fp.close()
显示所设置的断言结果