测试固件
import unittest
from selenium import webdriver
import time
class BaiduTest(unittest.TestCase):
#测试固件
def setUp(self):
self.driver=webdriver.Chrome()
self.driver.maximize_window()
self.driver.get('https://www.baidu.com/')
self.driver.implicitly_wait(30)
def tearDown(self):
self.driver.quit()
#测试用例
def test_baidu_news(self):
self.driver.find_element_by_link_text(u'新闻').click()
def test_baidu_map(self):
self.driver.find_element_by_link_text(u'地图').click()
if name==‘main’:
unittest.main(verbosity=2)
verbosity=2 详细模式,显示每个测试用例的所有相关的信息
0 总的测试用例数和总的结果
1(默认模式): 非常类似静默模式 只是在每个成功的用例前面有个“.” 每个失败的用例前面有个 “F”
小小的提示 以方法名的首个不同的字母ASILL大小顺序执行,小的先执行
该方式有几个实例则创建几个浏览器
测试固件只执行一次
@classmethod
def setUpClass(cls):
print('start')
@classmethod
def tearDownClass(cls):
print('end)
测试套件
1.按顺序执行
Suite=unittest.TestSuite()
Suite.addTest(类('方法名'))
Suite.addTest(类('方法名'))
unittest.TextTestRunner(verbosity=2).run(suite)
2.按测试类执行 与直接执行的区别:可以控制执行类的数量
suite=unittest.TestSuite(unittest.makeSuite(BaiduTest))
unittest.TextTestRunner(verbosity=2).run(suite)
3.加载测试类
suite=unittest.TestLoader().loadTestsFromTestCase(BaiduTest)
unittest.TextTestRunner(verbosity=2).run(suite)
4.按测试模块执行
suite=unittest.TestLoader().loadTestsFromTestModule('unittest.py')
unittest.TextTestRunner(verbosity=2).run(suite)
5优化:写成一个方法来使用
@staticmethod
def suite(testCaseClass)
suite=unittest.TestLoader().loadTestsFromTestCase(testCaseClass)
return suite
分离测试固件
将测试固件写在一个py文件里,其他文件导入后继承
测试断言 判断是否正确,测试必须有权威
1.assertEqual(a,b)必须值,类型都一样 类似is
2.assertTrue(so.is_enable())返回布尔类型
3.assertFalse
4.assertIn(a,b)
测试中只有pass和Fail
批量执行py文件
例子 allTest.py
import unittest
import os
import time
import HTMLTestRunner
def allCase():
#获得所有测试模块
suite=unittest.TestLoader().discover(
start_dir=os.path.dirname(__file__),#获得当前py文件的目录绝对路径
pattern='test_*.py'
top_lever_dir=None)
return suite
if __name__=='__main__':
unittest.TextTestRunner(verbosity=2),run(allcase())
生成测试报告(原因alltest不够专业)
完善allTest.py文件
def getnowtime():
return time.strftime('%Y-%m-%d %H-%M-%S',time.localtime())#获取当前时间
def run():
fileName=os.path.join(os.path.dirname(__file__),'report'
,getnowtime()+‘report.html’)
#生成当前目录/report/'时间report.html'
#os.path.join()函数:连接两个或更多的路径名组件
#1.如果各组件名首字母不包含’/’,则函数会自动加上
#2.如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃
#3.如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾
fp=open(fileName,'wb')
runner=HTMLTestRunner.HTMLTestRunner(
stream=fp,
title='UI自动化测试',
description='UI自动化测试报告详细信息'
runner.run(allCases())
)
if __name__=='__main__':
run()
覆盖率
在allTest.py的目录下执行coverage3 run allTests.py
再执行coverage html