数据驱动和关键字驱动简单例子(登录)
数据驱动:程序和数据分离,测试数据存入一个文件中,脚本存入另一个文件中
公司项目为保密项目,地址使用xxx代替
数据文件:D:\test\loginData.txt
文件内容:
admin_cyl||123456a
admin_test||a123456
test_shi||a123456
代码:
#encoding=utf-8
import unittest
from selenium import webdriver
import time
class VisitClosePlaceByIe(unittest.TestCase):
def setUp(self):
#启动Ie浏览器
self.driver = webdriver.Ie(executable_path = "D:\IEDriverServer")
def test_visitURL(self):
with open("D:\test\loginData.txt") as fp:
for line in fp:
username,password = line.split("||")
password = password.strip().decode("gbk")
self.driver.get("xxx")
self.driver.find_element_by_id("username")
self.driver.find_element_by_id("username").send_keys(username)
self.driver.find_element_by_id("password")
self.driver.find_element_by_id("password").send_keys(password)
self.driver.find_element_by_id("button")
self.driver.find_element_by_id("button").click()
time.sleep(3) #不加等待时间,则page_source获取的是登录页面的源代码
assert u"封闭学校管理平台" in self.driver.page_source ,"Keyword not in page"
def tearDown(self):
self.driver.quit()
关键字驱动:将测试用例的执行步骤存放在文件中,每个步骤单独封闭成一个函数,以这个函数名作为关键字,将函数名及传参写入文件中,第个步骤对应一行文件
数据文件:D:\test\schoolLogin.txt
文件内容:
visitUrl||["xxx"]
find_ele||["username","admin_cyl"]
find_ele||["password","123456a"]
click_login||["button"]
assert_word||[u"封闭学校管理平台"]
代码:school_login.py
#encoding=utf-8
import unittest
from selenium import webdriver
import time
class VisitSchool(unittest.TestCase):
def setUp(self):
#启动IE浏览器
self.driver = webdriver.Ie(executable_path="D:\IEDriverServer")
def visitUrl(self,url):
#由于参数个数不一致,所以使用列表做为参数,再用eval将列表字符串转化为列表
url = eval(url)
#打开网页
self.driver.get(url[0])
def find_ele(self,arg):
arg = eval(arg)
#定位输入框并输入值
self.driver.find_element_by_id(arg[0]).send_keys(arg[1])
#本来想用两个函数,一个定位,一个输入值,但是输入函数中无法使用定位,所以合并成一个函数
def click_login(self,id):
id = eval(id)
#定位按钮并点击
self.driver.find_element_by_id(id[0]).click()
def assert_word(self,keyword):
#等待3秒,以便页面加载,否则page_source是登录页面的
time.sleep(3)
keyword = eval(keyword)
#断言
assert keyword[0].strip() in self.driver.page_source, "Keyword not in page"
def test_schoolLogin(self):
with open("D:\test\schoolLogin.txt") as fp:
for line in fp:
action,data = line.split("||")
action = action.strip()
data = data.decode("gbk").strip()
#拼接执行命令
exec("self."+action+"(u'"+data+"')")
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main()