通过对前面对 unittest 框架的学习我们了解到,可以在一个.py 文件里编写多个测试用例,然后执行 文件里的所有用例,这显然是一个不错的做法,我们可以将一些相关的用例放到一个文件里,unittest 支 持这么做,但假如我们成百上千的用例呢,放一.py 文件显然有些不太合理。
比较合理的做法是把相关的几条用例放到一个.py 文件里,把所有.py 文件放到一个文件夹下,然后通 过一个程序执行文件夹下面的所有用例。
baidu1.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 Baidu1(unittest.TestCase):
def setUp(self):
self.driver =webdriver.Firefox()
self.driver.implicitly_wait(30)
self.base_url ="http://www.baidu.com"
self.verficationErrors=[]
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")
#设置每页搜索结果为100条
m=driver.find_element_by_name("NR")
m.find_element_by_xpath("//option[@value='10']").click()
time.sleep(2)
#保存设置的信息
driver.find_element_by_xpath("//input[@value='保存设置']").click()
time.sleep(2)
driver.switch_to_alert().accept()
def tearDown(self):
self.driver.quit()
self.assertEqual([],self.verficationErrors)
if __name__=="__name__":
unittest.main()
下面编写 test_case.py 点文件来读取 test_case 文件夹下的文件:
# coding=utf-8
import os
casedir ="./TestCase"
caselist =os.listdir(casedir)
#print caselist
for a in caselist:
s=a.split('.')[1]
if s=='py':
#print 'aaaaaa'
os.system((casedir+"/%s 1>>log.txt 2>&1")%a)
python 知识补充:
python 的 os 模块可以用来操作本地文件,通过 os.listdir()函数获得指定目录中的内容;
split()用于字符串分割,本例中以文件名的点(.)作为分割。被分割之的字符串‘testing.py’会 变成['testing','py'] ,[n]表示数组,因为数组是从0开始计算的,所以[0]取的是‘testing’,那么[1] 取的就是‘py’。
把取到的结果赋值给 s ,if 判断 s 等于(==)‘py’则执行后面的语句。
os.system((casedir+"/%s 1>>log.txt 2>&1")%a) 语句根据上面的判断 条件选取
./TestCase目录下的文件执行,并将执行结果保存到 log.txt 文件中。