selenium - 自动化测试模型 - 模块化数据驱动(参数化)
Posted xiaochongc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium - 自动化测试模型 - 模块化数据驱动(参数化)相关的知识,希望对你有一定的参考价值。
按自动化测试的发展顺序,主要以下几种模型:
- 线性模型:按顺序编写操作步骤产生线性脚本,开发维护成本高(例如登录的重复操作,每个脚本都需要开发和维护)
- 模块化驱动测试:将重复的操作独立成公共模块,需要时调用即可,降低开发和维护成本
- 数据驱动测试:数据的参数化,可以通过定义变量、数组、字典、外部文件(excel、csv、txt、xml等)进行,例如不同的登录名和密码登录系统
- 关键字驱动测试:典型的工具如QTP、seleniumIDE等
下面主要介绍模块化驱动测试和数据驱动测试:
1. 模块化驱动测试
将重复的操作独立成公共模块,如下:
a)传统的线性模型
1 from selenium import webdriver 2 import time 3 4 driver = webdriver.Chrome() 5 driver.implicitly_wait(10) 6 driver.get("http://www.baidu.com") 7 8 # 百度首页输入框,搜索关键字 9 driver.find_element_by_id(‘kw‘).send_keys(‘fda‘) 10 driver.find_element_by_id(‘su‘).click() 11 time.sleep(2) 12 13 # 退出并关闭浏览器 14 driver.quit()
b)将搜索和退出模块,封装成函数
1 from selenium import webdriver 2 import time 3 4 driver = webdriver.Chrome() 5 driver.implicitly_wait(10) 6 driver.get("http://www.baidu.com") 7 8 # 定义函数 - 百度首页输入框,搜索关键字 9 def search_keyword(): 10 driver.find_element_by_id(‘kw‘).send_keys(‘fda‘) 11 driver.find_element_by_id(‘su‘).click() 12 time.sleep(2) 13 14 # 定义函数 - 退出并关闭浏览器 15 def quit(): 16 driver.quit() 17 18 # 函数调用 19 search_keyword() 20 quit()
c)将公共模块放到单独的脚本文件中
test1.py 主文件
1 from selenium import webdriver 2 import public1 3 4 driver = webdriver.Chrome() 5 driver.implicitly_wait(10) 6 driver.get("http://www.baidu.com") 7 8 public1.TestClass().search_keyword(driver) 9 public1.TestClass().quit(driver)
单独的脚本文件public1.py
1 import time 2 3 class TestClass: 4 # 百度首页输入框,搜索关键字 5 def search_keyword(self, driver): 6 driver.find_element_by_id(‘kw‘).send_keys(‘fda‘) 7 driver.find_element_by_id(‘su‘).click() 8 time.sleep(2) 9 10 # 退出并关闭浏览器 11 def quit(self, driver): 12 driver.quit()
2. 数据驱动测试
a)以数组的方式,对搜索的关键字进行参数化
1 from selenium import webdriver 2 import time 3 4 driver = webdriver.Chrome() 5 driver.implicitly_wait(10) 6 driver.get("http://www.baidu.com") 7 8 key_word = [‘aaa‘, ‘bbb‘, ‘ccc‘] # 以数组的方式进行参数化 9 10 for word in key_word: 11 driver.find_element_by_id(‘kw‘).clear() 12 driver.find_element_by_id(‘kw‘).send_keys(word) 13 driver.find_element_by_id(‘su‘).click() 14 time.sleep(3) 15 16 driver.quit()
b)读取txt文件
如果只有一个字段,则分行放在txt文件中
例如,百度首页分别搜索关键字“aaa”、“bbb”、“ccc”,参数化文件如下:
aaa
bbb
ccc
1 from selenium import webdriver 2 import time 3 4 driver = webdriver.Chrome() 5 driver.implicitly_wait(10) 6 driver.get("http://www.baidu.com") 7 8 file = open(‘keyword.txt‘, ‘rt‘) # 用txt文件进行参数化 9 lines = file.readlines() 10 file.close() 11 12 for line in lines: 13 driver.find_element_by_id(‘kw‘).clear() 14 driver.find_element_by_id(‘kw‘).send_keys(line) 15 driver.find_element_by_id(‘su‘).click() 16 time.sleep(3) 17 18 driver.quit()
如果有多个字段,字段间用逗号“,”隔开
例如:登录系统,用户名和密码,参数化文件如下:
username01,key1
username02,key2
username03,key3
分别登录3个账号
1 from selenium import webdriver 2 import time 3 4 driver = webdriver.Chrome() 5 driver.maximize_window() 6 driver.implicitly_wait(10) 7 driver.get(‘http://192.168.3.108:11217/user/login?redirect=%2Fdashboard%2Fanalysis‘) 8 9 file = open(‘account.txt‘, ‘rt‘) # 打开文件 10 lines = file.readlines() # 读取所有行 11 12 for line in lines: 13 driver.find_element_by_id(‘username‘).send_keys(line.split(‘,‘)[0]) # 拆分字符串,以逗号为分割点 14 driver.find_element_by_id(‘password‘).send_keys(line.split(‘,‘)[1]) 15 driver.find_element_by_xpath(‘//*[@id="formLogin"]/div[3]/div/div/span/button‘).click() # 登录 16 time.sleep(5) 17 driver.find_element_by_xpath(‘//*[@id="app"]/div/div/div[2]/div[1]/div/div/span[3]/a/span‘).click() # 退出 18 time.sleep(2) 19 driver.find_element_by_xpath(‘/html/body/div[6]/div/div[2]/div/div[2]/div/div/div[2]/button[2]‘).click() 20 time.sleep(5) 21 print(‘first, ok‘) 22 23 time.sleep(5) 24 driver.quit()
c)读取csv文件
csv文件可以用来读取一组数据(如用户名、邮箱、年龄、性别等信息)。
创建csv文件,创建Excel表格,另存为CSV(不要直接修改文件后缀名,那不是真正的csv文件)
1 from selenium import webdriver 2 from selenium.webdriver.common.keys import Keys 3 import time, csv # 导入csv包 4 5 driver = webdriver.Chrome() 6 driver.maximize_window() 7 driver.implicitly_wait(10) 8 driver.get(‘http://192.168.3.108:11217/user/login?redirect=%2Fdashboard%2Fanalysis‘) 9 10 infos = csv.reader(open(‘info.csv‘, ‘r‘)) # 读取csv文件 11 for info in infos: # 遍历文件中的每一行数据(读取的数据以数组的形式存储,若想取某一列数据,只需指定下标即可) 12 driver.find_element_by_id(‘username‘).clear() 13 driver.find_element_by_id(‘username‘).send_keys(info[0]) 14 driver.find_element_by_id(‘password‘).clear() 15 driver.find_element_by_id(‘password‘).send_keys(info[2]) 16 time.sleep(1) 17 driver.find_element_by_xpath(‘//*[@id="formLogin"]/div[3]/div/div/span/button‘).click() 18 time.sleep(5) 19 driver.find_element_by_xpath(‘//*[@id="app"]/div/div/div[2]/div[1]/div/div/span[3]/a/span‘).click() 20 driver.find_element_by_xpath(‘/html/body/div[6]/div/div[2]/div/div[2]/div/div/div[2]/button[2]‘).send_keys(Keys.ENTER) 21 time.sleep(2) 22 23 time.sleep(5) 24 driver.quit()
d)读取xml文件
待续。。。
以上是关于selenium - 自动化测试模型 - 模块化数据驱动(参数化)的主要内容,如果未能解决你的问题,请参考以下文章