selenium - 自动化测试模型 - 模块化、数据驱动(参数化)

云之高水之远 2020-03-26

按自动化测试的发展顺序,主要以下几种模型:

  • 线性模型:按顺序编写操作步骤产生线性脚本,开发维护成本高(例如登录的重复操作,每个脚本都需要开发和维护)
  • 模块化驱动测试:将重复的操作独立成公共模块,需要时调用即可,降低开发和维护成本
  • 数据驱动测试:数据的参数化,可以通过定义变量、数组、字典、外部文件(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文件

待续。。。

相关推荐