文章目录
1.unittest框架
单个脚本重复的操作:导包,获取浏览器的驱动,关闭浏览器,清除浏览器的操作。降低效率。
避免这些重复的操作?
用框架
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)
把我们需要一次性执行的测试用例,放在一个套件里,一次性运行
addTest
把 一个测试脚本中某几个测试用例方法添加到测试套件
(脚本名称.类名称.方法名称)
makeSuite
把一个测试脚本中所有的测试用例方法添加到测试套件makeSuite
addTest(unittest.makeSuite(脚本名称.类名称))
TestLoader
把一个文件中所有以某种形式命名的测试脚本中的所有测试用方法添加到测试套件
unittest.TestlLoader().LoadTestsFromTestCase(脚本名称.类名称)
discover
把一个文件夹中所有的测试脚本中的测试用例放入到测试套件
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
4.忽略测试用例的执行
@unittest.skip(“skipping”)
5.断言
自动化测试脚本中,如何判断实际结果和预期结果是否一致?
6.HTML报告的生成
测试用例比较多的时候,需要统计测试用例的执行结果,比如,执行了多少测试用例,执行成功的有多少,执行失败的有多少,执行失败的原因。
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)