Unittest单元测试框架

测试固件
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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值