关闭

(selenium 五)unittest通过测试套件组织用例

2676人阅读 评论(0) 收藏 举报
分类:

执行多个测试文件(所有py文件位于同一目录)、整合HTMLTestRunner 测试报告(加注释、报告文件名取当前时间)。以下是源码:

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)




1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

(selenium 六)unittest通过测试套件组织用例 (2)

上一边文章中,all_tests.py文件与测试用例都位于同一文件见。下面通过在测试用例文件夹下添加__init__.py形成包文件,然后再all_test.py中添加PATH路径导入包即可。具体操作如下: 1、在test_case文件夹下新建__init__.py文件, import baid...
  • fanxiyanhong
  • fanxiyanhong
  • 2016-06-02 14:11
  • 1714

Python单元测试unittest加载方式之二:加载测试套件

Python、unittest
  • jlhx123456
  • jlhx123456
  • 2015-06-26 19:52
  • 3364

【python单元测试unittest】加载测试套的代码修正

【python单元测试unittest】原创地址:点击打开链接 好文章,简单易懂,收藏了。 最后一处加载测试套的代码有2处有错误。看到有人在问。所以写了这篇博文。 源码更正如下: import unittest import re import os import sys d...
  • guoxia
  • guoxia
  • 2016-07-21 01:22
  • 304

python+selenium+unittest测试demo

  • 2016-04-14 15:40
  • 22KB
  • 下载

Junit 实例精讲基础教程(五) JUnit套件测试,一次性运行多个测试用例(测试类的测试方法)

前面我们已经了解了使用Junit进行单个方法的测试、以及如何模拟超时测试和异常测试,抛出一个问题:我不想一个一个地去跑测试用例,应该怎么办呢?Junit套件测试为我们提供了解决方案,它可以使用@RunWith(Suite.class)注解结合@Suite.SuiteClasses({Class1.c...
  • zixiao217
  • zixiao217
  • 2016-11-12 12:08
  • 1697

Python+Selenium框架设计篇之9-unittest执行脚本方法之makeSuite()

前面文章介绍了如何用addTest()方法来加载我们测试用例到suite中去,本文介绍利用makeSuite()方法,一次性加载一个类文件下所有测试用例到suite中去。还是利用前面一篇文章中的测试脚本,来看看TestRunner.py如何写。 # coding = utf-8 import un...
  • u011541946
  • u011541946
  • 2017-04-22 17:07
  • 2805

Python-unittest测试框架

一、unittest是一个Python的单元测试框架,可以帮我们完成接口自动化测试、UI自动化测试一个使用unittest框架的自动化测试用例代码如下:test_baidu.py # coding=utf-8 ''' Created on 2017-6-14 @author:...
  • galen2016
  • galen2016
  • 2017-06-28 17:57
  • 370

selenium unittest管理测试用例

11.处理下拉菜单的方法         allarea = self.lsp.find_element_by_id("province")      &#...
  • Mr_hanjc
  • Mr_hanjc
  • 2015-11-15 09:14
  • 1029

使用unittest.TestSuite组织执行用例

#-*-coding:utf-8-*- ''' Created on 2016年4月11日@author: Zroad '''import calculator import unittestclass TestSuiteForCount(unitte...
  • u010039733
  • u010039733
  • 2016-04-11 23:27
  • 2855

Junit4学习之套件测试

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的...
  • qqHJQS
  • qqHJQS
  • 2015-06-16 21:32
  • 949
    个人资料
    • 访问:32733次
    • 积分:609
    • 等级:
    • 排名:千里之外
    • 原创:27篇
    • 转载:8篇
    • 译文:0篇
    • 评论:4条
    最新评论