最近一段时间在写测试框架–关键字和数据驱动的,后续完善一下会持续更新到博客里面。
本篇博客是在写框架的时候思考到的一个问题,如果不同文件中的成百上千个用例都需要执行呢,难道要一个一个py文件点击去运行吗?当然不能够,selenium还是很贴心的,这一点早就为大家想到了!通过unittest就可也以完美实现这个功能,那么我和大家分享一下我的学习心得。
- 下面分享的内容是关于WEB的自动化测试。
用例部分:
通常包括三部分:
测试前准备setUp、测试用例testCase、测试后环境还原tearDown
例子:
test01.py
#encoding=utf-8
"""百度搜索"""
import unittest
from time import sleep
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
class BaiDuTest(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Chrome(executable_path='c:\\Python27\\chromedriver')
self.wait=WebDriverWait(self.driver,10)
print 'BaiDuTest Start'
def test_baidu(self):
self.driver.get("https://www.baidu.com/")
sleep(1)
self.wait.until(lambda x: x.find_element("id", "kw")).send_keys('hello')
sleep(0.5)
self.wait.until(lambda x:x.find_element("id","su")).click()
sleep(1)
def tearDown(self):
self.driver.quit()
print "BaiDuTest Over"
if __name__=="__main__":
unittest.main()
test02.py
#encoding=utf-8
"""搜狗搜索"""
import unittest
from time import sleep
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
class SouGouTest(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Chrome(executable_path='c:\\Python27\\chromedriver')
self.wait=WebDriverWait(self.driver,10)
print 'SouGouTest Start'
def test_sougou(self):
self.driver.get('https://www.sogou.com/')
sleep(1)
self.wait.until(lambda x:x.find_element("id","query")).send_keys('hello')
sleep(0.5)
self.wait.until(lambda x:x.find_element("id","stb")).click()
sleep(2)
def tearDown(self):
self.driver.quit()
print "SouGouTest Over"
if __name__=="__main__":
unittest.main()
这里面,每个.py里面都有一条测试用例:
test_sougou和test_baidu。
如何进行单元测试呢?——unittest.main()
该方法可以搜索到该模块下的所有以test开头的测试用例,并执行他们,但是执行顺序是根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z。所以以A开头的测试用例方法会优先执行,以a开头会后执行。
还有一种执行方式,就是构造测试集合,往测试集合里面添加测试用例,然后实例化TextTestRunner()类,用实例调用run方法,传递构造好的测试用例集合,这样就可以一次性按照顺序执行所有的想要执行的测试用例;
脚本如下:
test_for_run.py
#encoding=utf-8
from test import test01
from test import test02
import unittest
#构造测试集合
suite=unittest.TestSuite()
#方法一
#测试用例,哪个写在列表前面,就被先执行,可以一条一条添加用例,也可以用列表的形式传递到测试集合里面。
#【注意】一条一条添加是suite.addTest,用例列表添加是suite.addTests;
test_cases=[test01.BaiDuTest('test_baidu'),test02.SouGouTest('test_sougou')]
suite.addTests(test_cases)
#方法二:
suite.addTest(test02.SouGouTest('test_sougou'))
suite.addTest(test01.BaiDuTest('test_baidu'))
if __name__=="__main__":
#实例化TextTestRunner()类
runner=unittest.TextTestRunner()
#使用类TextTestRunner中的run方法运行测试套件(所要执行的所有测试用例)
runner.run(suite)
上面例子的测试目录如下:
这里面推荐一篇博客,http://www.cnblogs.com/yufeihlf/p/5707929.html
我查资料的时候看到的,里面对unittest的各个模块的属性的介绍还蛮多的,有需要的可以了解下,好东西,要分享!!!
我打算每篇博客以后带一张图,为博客增添的色彩,不要那么枯燥,本篇博客上一张我去青海和我家狗子的图片,不多说,上图!