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 - 自动化测试模型 - 模块化数据驱动(参数化)的主要内容,如果未能解决你的问题,请参考以下文章

Python+Selenium学习--自动化测试模型

虫师Selenium2+Python_5自动化测试模型

Python3+Selenium2完整的自动化测试实现之旅:自动化测试框架Python面向对象以及POM设计模型简介

自动化测试基础篇--Selenium发送测试报告邮件

Selenium 2自动化测试实战4(引用模块)

selenium之自动化测试脚本的模块化设计