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