unittest框架1.测试固件2.测试套件(suit)
addTestmakeSuiteTestLoaderdiscover 3.测试用例执行顺序4.忽略测试用例的执行5.断言6.HTML报告的生成7.错误捕捉,异常截图8.数据驱动
unittest框架单元测试框架有哪些?
Junit是基于Java语言的白盒单元测试框架
unittest是单基于功能的单元测试框架,是基于ui界面的功能性测试
单个脚本重复的操作:导包,获取浏览器的驱动,关闭浏览器,清除浏览器的操作。降低效率。
避免这些重复的操作?
setUp()初始化环境
tearDown()关闭浏览器,清理环境
用框架
unittest框架之setUp方法:
在执行测试用例脚本之前进行初始化环境的方法
方法参数中的self是干什么的
self代表类的实例/引用
定义全局变量,所有方法都可以使用
全局变量的定义:sel.变量名
tearDown()
去进行一些测试用例执行后清理环境的操作
setUp() tearDown() 测试固件
测试用例的方法是以:test_开头
from selenium import webdriver
import time
import unittest
class TestUnit1(unittest.TestCase):
# 获取浏览器的驱动
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.maximize_window()
self.url = "https://www.baidu.com/"
self.driver.get(self.url)
time.sleep(3)
# 在百度中搜索信息
# 测试用例的起名要用test_
def test_search1(self):
self.driver.find_element_by_id("kw").send_keys("长津湖")
self.driver.find_element_by_id("su").click()
time.sleep(6)
def test_search2(self):
self.driver.find_element_by_id("kw").send_keys("Lisa")
self.driver.find_element_by_id("su").click()
time.sleep(6)
# 关闭浏览器
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main()
2.测试套件(suit)
把不同文件下的测试用例组织起来形成的测试用例组,就叫做测试套件。
把我们需要一次性执行的测试用例,放在一个套件里,一次性运行
把 一个测试脚本中某一个或几个测试用例方法添加到测试套件
(脚本名称.类名称.方法名称)
把一个测试脚本中所有的测试用例方法添加到测试套件makeSuite
addTest(unittest.makeSuite(脚本名称.类名称))
把一个文件中所有以某种形式命名的测试脚本中的所有测试用方法添加到测试套件
unittest.TestlLoader().LoadTestsFromTestCas e(脚本名称.类名称)
把一个文件中所有以类形式命名的测试脚本中的所有测试用方法添加到测试套件
discover=unittest.defaultTestLoader.discover(具体文件夹,pattern=测试脚本名称通配符,top_level_dir=None)
import unittest
from src20211230 import testbaidu2
from src20211230 import testbaidu1
def creatSuit():
# 要把不同的测试脚本的类中的需要执行的方法放在一个测试套件中
# suit = unittest.TestSuite()
# suit.addTest(testbaidu1.Baidu1("test_hao"))
# suit.addTest(testbaidu2.Baidu2("test_hao"))
# suit.addTest(testbaidu2.Baidu2("test_baidusearch"))
# return suit
#如果我需要把一个测试脚本中年所有的测试用例都添加到suit中,怎么做?
# makeSuit
# suit = unittest.TestSuite()
# suit.addTest(unittest.makeSuite(testbaidu1.Baidu1))
# suit.addTest(unittest.makeSuite(testbaidu2.Baidu2))
# return suit
# TestLoader
# suit1 = unittest.TestLoader().loadTestsFromTestCase(testbaidu1.Baidu1)
# suit2 = unittest.TestLoader().loadTestsFromTestCase(testbaidu2.Baidu2)
# suit = unittest.TestSuite([suit1, suit2])
# return suit
# 可以把一个文件夹下面所有的测试脚本中的测试用例放入测试套件
discover = unittest.defaultTestLoader.discover("../src20211230", pattern="testbaidu*.py", top_level_dir=None)
return discover
if __name__ == "__main__":
suit = creatSuit()
# verbersity= 0, 1, 2
runner = unittest.TextTestRunner()
runner.run(suit)
3.测试用例执行顺序
test_
0——9,A——Z,a——z
添加一个标签到测试用例上
@unittest.skip(“skipping”)
自动化测试脚本中,如何判断实际结果和预期结果是否一致?
测试用例比较多的时候,需要统计测试用例的执行结果,比如,执行了多少测试用例,执行成功的有多少,执行失败的有多少,执行失败的原因。
import HTMLTestRunner
import os
import sys
import time
import unittest
def createsuite():
discovers = unittest.defaultTestLoader.discover("../src20211230", pattern="testbaidu*.py", top_level_dir=None)
print(discovers)
return discovers
if __name__=="__main__":
# 文件夹要创建在哪里
curpath = sys.path[0]
print(sys.path)
print(sys.path[0])
# 1,创建文件夹,创建的这个文件夹干什么
if not os.path.exists(curpath+'/resultreport'):
os.makedirs(curpath+'/resultreport')
# 2,文件夹的命名,不能让名称重复
# 时间 时分秒 ——》名称绝对不会重复
now = time.strftime("%Y-%m-%d-%H %M %S", time.localtime(time.time()))
print(now)
print(time.time())时间戳
print(time.localtime(time.time()))
# 文件名
filename = curpath + '/resultreport/'+ now + 'resultreport.html'
with open(filename, 'wb') as fp:
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u"测试报告",
description=u"用例执行情况", verbosity=2)
suite = createsuite()
runner.run(suite)
7.错误捕捉,异常截图
BUG的要素
标题,代码的版本图,测试环境(测试数据),预期结果,实际结果,附件(错误日志,错误截图)
BUG的复现:让BUG再次出现
get_screenshot_as_file(文件名称)
HTML报告和错误截图都是用来分析测试用例批量执行后结果的,错误截图可以帮助我们清晰地看到错误具体出现的页面以及错误状况
#在百度中搜索信息——英文
def test_search2(self):
self.driver.find_element_by_id("kw").send_keys("Lisa")
self.driver.find_element_by_id("su").click()
time.sleep(6)
try:
self.assertEqual("清风",self.driver.title,msg="和预期结果不一致")
except:
self.save_errorImage(self.driver,"error.png")
def save_errorImage(self,driver,fileName):
#"./来表示当前路径"
if not os.path.exists("./image"):
os.makedirs("./image")
#错误截图的名称不一样
now = time.strftime("%Y%m&d-%H%M%S",time.localtime(time.time()))
driver.get_screenshot_as_file("./image/"+now+"-"+fileName)
生成异常截图文件
生成错误截图
用测试数据驱动测试用例
测试百度搜索这个功能,你能设计多少个测试用例
安装DDT
类名上加@ddt
方法名上@ddt
@unpack 数据匹配
@file_data 用Jason时



