摘要:XUnit是单元测试框架体系。Selenium2又称第二代Selenium,即WebDriver+Selenium1,支持Python、Java等多种语言。数据驱动在自动化测试中扮演了重要的角色。本文以Python语言来进行详细介绍,最后给一个Java的案例。
1、XUnit介绍
首先我们先来介绍一下XUnit,XUnit是各种代码驱动测试框架的统称,这些框架可以测试软件的不同内容(单元),比如函数和类。XUnit框架的主要优点是,它提供了一个自动化测试的解决方案。没有必要多次编写重复的测试代码,也不必记住这个测试的结果应该是怎样的。XUnit的测试框架体系见图一。
图一 XUnit的测试框架体系
接下来我们介绍一下JUnit的四要素:
1,测试Fixtures:是一组认定被测对象或被测程序单元测试成功的预定条件或预期结果的设定。Fixture就是被测试的目标,可能是一个对象或一组相关的对象,甚至是一个函数。测试人员在测试前就应该清楚对被测对象进行测试的正确结果是什么,这样就可以对测试结果有一个明确的判断。
2,测试集:测试集就是一组测试用例,这些测试用例要求有相同的测试Fixture,以保证这些测试不会出现管理上的混乱。
3,测试执行:单个单元测试的执行可以按下面的方式进行:
setUp();/*首先,我们要建立针对被测程序单元的独立测试环境*/
……
/*然后,编写所有测试用例的测试体或测试程序*/
……
tearDown();/*最后,无论测试成功还是失败,都将环境进行清理,以免影响后继的测试*/
4,断言:断言实际上就是验证被测程序在测试中的行为或状态的一个宏或函数。断言失败实际上就是引发异常,终止测试的执行。
XUnit测试流程是:
1,对Fixture 进行初始化,以及其他初始化操作;
2,按照要测试的某个功能或流程对Fixture 进行操作;;
3,验证结果是否正确;
4,对Fixture的以及其他的资源释放等做清理工作。
XUnit支持多种语言,比如Junit(支持Java语言),NUnit(支持.NET语言),CPPUnit(支持C++语言),unittest(支持Python语言)等,下面我们来看一段unittest框架用来测试Python程序的代码:
#!/usr/bin/env python
#coding:utf-8
import unittest
from Calculator import calculator
class calculatortest(unittest.TestCase):
def setUp(self):
print "Test start!"
def test_base(self):
j=calculator(4,2)
self.assertEqual(j.myadd(),6)
self.assertEqual(j.mysubs(),2)
self.assertEqual(j.mymultiply(),8)
self.assertEqual(j.mydivide(),2)
def test_subs(self):
mydata = [[4,2,2],[2,4,-2],[4,-4,0]]
for i in mydata:
n=0
j=calculator(mydata[n][0],mydata[n][1])
self.assertEqual(j.mysubs(),mydata[n][2])
n+=1
def test_multiply(self):
mydata = [[4,2,8],[4,-2,-8],[-4,2,-8],[-4,-2,8]]
for i in mydata:
n=0
j=calculator(mydata[n][0],mydata[n][1])
self.assertEqual(j.mymultiply(),mydata[n][2])
n+=1
def tearDown(self):
print "Test end!"
if __name__=='__main__':
#构造测试集
suite=unittest.TestSuite()
suite.addTest(calculatortest("test_base"))
suite.addTest(calculatortest("test_subs"))
suite.addTest(calculatortest("test_multiply"))
#运行测试集合
runner=unittest.TextTestRunner()
runner.run(suite)
显然这是一个测试加、减、乘、除四则运算程序的测试代码。
1,import unittest引入unittest测试包。
2,from Calculator import calculator 引入被测对象。
3,class calculatortest(unittest.TestCase):建立测试类。
4,def setUp(self):
print "Test start!"
初始化测试用例程序,在这里只需要打印一个"Test start!"的字符串。
5,def test_base(self):
…
开始书写每一个测试函数。
6,def tearDown(self):
print "Test end!"
结束测试用例程序,在这里只需要打印一个"Test end!"的字符串。
7,if __name__=='__main__':
…
这一段为定义主函数。
2、Selenium2介绍
接下来我们介绍Selenium2,根据百度百科介绍:Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性――测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能――创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。下面是一段利用python书写的Selenium2测试代码。
#!/usr/bin/env python
#coding:utf-8
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
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,os,time
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support import expected_conditions as EC
brower =""
def checkbrowser(brower):
if brower=="IE":
driver = webdriver.Ie()
return driver
if brower=="firefox":
driver = webdriver.Firefox()
return driver
def printlog(functionname,result):
if(result):
print "The testcase of "+functionname+" is Pass!"
else:
print "The testcase of "+functionname+" is not Pass!"
#判断body里面文字是否存在
def isTextPresent(what):
mytext=driver.find_element_by_tag_name("body").text
if what in mytext:
print "body里不存在"+what
return True
else:
return False
def CheckBaidu(driver,inputString):
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_keys(inputString)
driver.find_element_by_id("su").click()
if driver.title==inputString+unicode('_百度搜索',encoding='utf-8'):
print "The Result page Title is error"
result=False
else:
result=True
time.sleep(5)
printlog("CheckBaidu()",result)
def Check3testing(driver,checktext,menu):
driver.get("http://www.3testing.com")
driver.switch_to.default_content()
driver.switch_to.frame("head")
driver.find_element_by_partial_link_text(menu).click()
driver.switch_to.default_content()
if isTextPresent(unicode('checktext',encoding='utf-8')):
result=False
else:
result=True
time.sleep(5)
printlog("Check3testing()",result)
def Checktaobao(driver):
driver.get("https:/www.taobao.com")
driver.find_element_by_id("q").send_keys(unicode('巧克力',encoding='utf-8'))
driver.find_element_by_class_name("btn-search").click()
time.sleep(5)
#当前窗口
current_windows = driver.current_window_handle
driver.find_element_by_class_name('J_ClickStat').click()
time.sleep(10)
all_handles = driver.window_handles
for handle in all_handles:
if handle != current_windows:
driver.switch_to.window(handle)
break
time.sleep(10)
element = WebDriverWait(driver,5,0.5).until(
EC.presence_of_element_located((By.ID,"J_LinkBasket"))
)
element.click()
time.sleep(5)
element=driver.find_element_by_class_name("j_minilogin_iframe")
driver.switch_to.frame(element)
driver.find_element_by_class_name("J_Quick2Static").click()
driver.find_element_by_id("TPL_username_1").send_keys("xianggu625@126.com")
driver.find_element_by_id("TPL_password_1").send_keys("syz541522")
driver.find_element_by_class_name("J_Submit").click()
result=True
if __name__=="__main__":
driver=checkbrowser("firefox")
driver.implicitly_wait(10)
CheckBaidu(driver,unicode('测试',encoding='utf-8'))
Check3testing(driver,unicode('顾翔',encoding='utf-8'),unicode('我的介绍',encoding='utf-8'))
Checktaobao(driver)
driver.quit()