(selenium 五)unittest通过测试套件组织用例
2016-06-02 09:03
316 查看
执行多个测试文件(所有py文件位于同一目录)、整合HTMLTestRunner 测试报告(加注释、报告文件名取当前时间)。以下是源码:
baidu.py
youdao.py
all.py
语法点:
1、implicitlyWait()
不是休眠,是设置超时时间,是每个driver自己去实现的。以IEDriverServer为例,implicitlyWait()会将一个超时的时间阀值传递给IEDriverServer,在findelement或者findelements的时候,首先去找web元素,如果没有找到,判断时间否超超过implicitlyWait()传递进来的阀值,如果没有超过,则再次找这个元素,直到找到元素或者时间超过最大阀值。
2、self.verificationErrors = []
脚本运行时,错误的信息将被打印到这个列表中。
3、self.accept_next_alert = True
是否继续接受下一下警告
4、alert=driver.switch_to_alert() #获取网页上警告信息
alert.accept() #接受警告信息
print alert.text() #得到文本信息并打印
5、单元测试unittest的两种启动方法:http://blog.csdn.net/five3/article/details/7104466
'TestCase':所有测试用例的基本类,给一个测试方法的名字,返回一个测试用例实例
'TestSuite':组织测试用例的实例,支持测试用例的添加和删除,最终将传递给testRunner进行测试执行
'TextTestRunner':进行测试用例执行的实例,其中Text的意思是以文本形式显示测试结果。显示测试名称,即完成的测试结果
'makeSuite':通常是由单元测试框架调用的,用于生产testsuite对象的实例
其实整个单元测试框架的逻辑出来了。分三步走:第一步testloader根据传入的参数获得相应的测试用例,即对应具体的测试方法,
然后makesuite在把所有的测试用例组装成testsuite,最后把testsiute传给testrunner进行执行。
而我们通常执行的unittest.main(),其实就是unittest.testprom方法,其执行的功能就是上面分析的三步,在第一步中其传入的参数是自身的模块__main__;
在第二步中把自身模块中的所有测试类中中的测试方法提取出来,并生成测试套件;最后再把测试套件传递给testrunner进行具体的测试。
通过unittest.main()来启动单元测试的测试模块
#具体的测试用例,一定要以test开头
#F表示一个fail, F前的点表示一个通过,有E的话表示程序自身异常
一种是添加到testsuite集合中再加载所有的被测试对象,而testsuit里存放的就是单元测试的用例
baidu.py
#coding=utf-8 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import Select from selenium.common.exceptions import NoSuchElementException import unittest, time, re class Baidu(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox() self.driver.implicitly_wait(30) self.base_url = "http://www.baidu.com/" self.verificationErrors = [] self.accept_next_alert = True #百度搜索用例 def test_baidu_search(self): '''百度搜索''' driver = self.driver driver.get(self.base_url + "/") driver.find_element_by_id("kw").send_keys("selenium webdriver") driver.find_element_by_id("su").click() time.sleep(2) driver.close() #百度设置用例 def test_baidu_set(self): '''百度设置''' driver = self.driver #进入搜索设置页 driver.get(self.base_url + "/gaoji/preferences.html") #设置每页搜索结果为50 条 m=driver.find_element_by_name("NR") #返回列表 print(m) m.find_element_by_xpath("//option[@value='50']").click() time.sleep(2) #保存设置的信息 driver.find_element_by_xpath("//input[@value='保存设置']").click() time.sleep(2) alert = driver.switch_to_alert() print(alert.text) #打印弹窗内容 alert.accept() def tearDown(self): self.driver.quit() self.assertEqual([], self.verificationErrors) #断言错误列表是否为空 if __name__ == "__main__": unittest.main()
youdao.py
#coding = utf-8 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import Select from selenium.common.exceptions import NoSuchElementException import unittest, time, re class Youdao(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox() self.driver.implicitly_wait(30) self.base_url = "http://www.youdao.com" self.verificationErrors = [] self.accept_next_alert = True #有道搜索用例 def test_youdao_search(self): '''有道搜索''' driver = self.driver driver.get(self.base_url + "/") driver.find_element_by_id("translateContent").send_keys("selenium") driver.find_element_by_xpath("/html/body/div[5]/div/form/button").click() time.sleep(2) def tearDown(self): self.driver.quit() self.assertEqual([], self.verificationErrors) if __name__=="__main__": unittest.main()
all.py
#coding = utf-8 import unittest import baidu,youdao #这里需要导入测试文件 import HTMLTestRunner import time testunit = unittest.TestSuite() #将测试用例加入到测试容器(套件)中 testunit.addTest(unittest.makeSuite(baidu.Baidu)) testunit.addTest(unittest.makeSuite(youdao.Youdao)) #取前面时间 now = time.strftime("%Y-%m-%M-%H_%M_%S",time.localtime(time.time())) filename = r"F:\技术提高学习\自动化框架\web自动化\实例\实例6_unittest通过测试套件组织用例\{0}result.html".format(now) print(filename) fp = open(filename, 'wb') runner = HTMLTestRunner.HTMLTestRunner(stream = fp, title = '百度搜索测试报告', description = '测试执行情况') #执行测试用例 runner.run(testunit)
语法点:
1、implicitlyWait()
不是休眠,是设置超时时间,是每个driver自己去实现的。以IEDriverServer为例,implicitlyWait()会将一个超时的时间阀值传递给IEDriverServer,在findelement或者findelements的时候,首先去找web元素,如果没有找到,判断时间否超超过implicitlyWait()传递进来的阀值,如果没有超过,则再次找这个元素,直到找到元素或者时间超过最大阀值。
2、self.verificationErrors = []
脚本运行时,错误的信息将被打印到这个列表中。
3、self.accept_next_alert = True
是否继续接受下一下警告
4、alert=driver.switch_to_alert() #获取网页上警告信息
alert.accept() #接受警告信息
print alert.text() #得到文本信息并打印
5、单元测试unittest的两种启动方法:http://blog.csdn.net/five3/article/details/7104466
'TestCase':所有测试用例的基本类,给一个测试方法的名字,返回一个测试用例实例
'TestSuite':组织测试用例的实例,支持测试用例的添加和删除,最终将传递给testRunner进行测试执行
'TextTestRunner':进行测试用例执行的实例,其中Text的意思是以文本形式显示测试结果。显示测试名称,即完成的测试结果
'makeSuite':通常是由单元测试框架调用的,用于生产testsuite对象的实例
其实整个单元测试框架的逻辑出来了。分三步走:第一步testloader根据传入的参数获得相应的测试用例,即对应具体的测试方法,
然后makesuite在把所有的测试用例组装成testsuite,最后把testsiute传给testrunner进行执行。
而我们通常执行的unittest.main(),其实就是unittest.testprom方法,其执行的功能就是上面分析的三步,在第一步中其传入的参数是自身的模块__main__;
在第二步中把自身模块中的所有测试类中中的测试方法提取出来,并生成测试套件;最后再把测试套件传递给testrunner进行具体的测试。
通过unittest.main()来启动单元测试的测试模块
#具体的测试用例,一定要以test开头
#F表示一个fail, F前的点表示一个通过,有E的话表示程序自身异常
一种是添加到testsuite集合中再加载所有的被测试对象,而testsuit里存放的就是单元测试的用例
#---------测试用例在同一个py文件中 #定义一个单元测试容器/构造测试集 suite = unittest.TestSuite() #将测试用例加入到测试容器中 suite.addTest(Baidu("test_baidu_search")) suite.addTest(Baidu("test_baidu_set")) # 执行测试 runner = unittest.TextTestRunner() runner.run(suite) #----------------------测试用例位于不同的py文件----------------------- suite = unittest.TestSuite() #将测试用例加入到测试容器(套件)中 suite.addTest(unittest.makeSuite(baidu.Baidu)) suite.addTest(unittest.makeSuite(youdao.Youdao)) #取前面时间 now = time.strftime("%Y-%m-%M-%H_%M_%S",time.localtime(time.time())) filename = r"F:\技术提高学习\自动化框架\web自动化\实例\实例6_unittest通过测试套件组织用例\{0}result.html".format(now) print(filename) fp = open(filename, 'wb') #执行测试用例 runner = HTMLTestRunner.HTMLTestRunner(stream = fp, title = '百度搜索测试报告', description = '测试执行情况' runner.run(testunit)
相关文章推荐
- Spring Boot启动流程详解(一)
- 利用https实现站点的访问
- 个人冲刺03
- 补码基础
- 《转》回顾15年程序生涯,我总结的7点经验
- 第七周项目一友元函数、成员函数和一般函数有区别2
- NYOJ 1218 zkc学长的福利
- 上传工具
- CLR和.Net对象
- 别人整理的DP大全(转)
- 项目37-分数类中的运算符重载
- Android从零开始之工欲善其事必先利其器--Android Studio主题颜色配置
- 第十一周阅读程序3
- 面试题90:旋转数组
- Hibernate02(单项有连接表N-1)
- 第14周项目2:两个成员的类模板(1)
- 【代码笔记】iOS-竖状图
- 【代码笔记】iOS-竖状图
- 社交网络中常用数据集
- <LeetCode OJ> 319. Bulb Switcher