1 自动化测试模型
自动化测试模型可分为:线性测试,模块化与类库,数据驱动测试,关键字驱动测试。
1.1 线性测试:
通过录制或编写对应用程序的操作步骤会产生相应的线性脚本,每个线性脚本相对独立,并不产生依赖与调用,即单纯的模拟用户完整的操作场景,在前面几章提到的例子都属于线性测试。
1.2 模块化与类库
线性测试是不容易维护的,因此新的自动化测试模型出现了,做法很简单,借鉴了编程语言中的模块化思想,把重复的操作单独封装成公共模块,在测试用例执行过程中,当需要用到模块封装时对其进行调用,这样就最大限度的消除了重复,从而提高了测试用例的可维护性。
1.3 数据驱动测试
虽然模块化测试很好的解决了脚本重复的问题,但是自动化测试脚本在开发过程中还是有很多不便,例如,在测试登录时,虽然过程是一样的,但是数据是不同的,模块化测试没有解决这个问题。于是,数据驱动测试出现了。 数据驱动测试:数据的改变驱动自动化测试的执行,最终引起测试结果的改变。即把数据驱动所需的测试数据参数化,我们可以用多种方式来存储和管理这些参数化的数据。
1.4 关键字驱动测试
关键字驱动测试又被称为 表驱动测试 或 基于动作字测试。这类框架会把自动化操作封装成“关键字”,避免测试人员直接接触代码,多以“填写格” 的形式降低脚本的编写难度。
2 模块化与参数化
模块化与参数化一般需要配合使用,即在创建函数或类方法时为它们设置入参,从而使它们可以根据不同的参数执行相应的操作。
比如在某些测试用例中都要用到登录,登出,就可以将登录,登出操作模块化,在使用时直接调用即可
from selenium import webdriver
chrome_driver_path = r"C:\Users\Administrator\Envs\selenuimAutoTest\Lib\site-packages\selenium\webdriver\chrome\chromedriver.exe"
driver = webdriver.Chrome(executable_path=chrome_driver_path)
class Mail():
def __init__(self, driver):
self.driver = driver
def login(self, username, password):
self.driver.switch_to.frame("x-URS-iframe")
self.driver.find_element_by_name("email").clear()
self.driver.find_element_by_name("email").send_keys(username)
self.driver.find_element_by_name("password").clear()
self.driver.find_element_by_name("password").send_keys(password)
self.driver.find_element_by_name("dologin").click()
def logout(self):
self.driver.find_element_by_link_text("退出").click()
3 读取数据文件
虽然前面的例子中用到了参数化,但是大多数测试更倾向于把数据放到数据文件中,下面介绍几种常见的读取数据文件的方式
3.1 读取txt文件
python提供了一下几种读取txt文件的方法
read():读取整个文件
readline():读取一行数据
readlines():读取所有行的数据
简单介绍一下,如下就可以拿到txt文件中数据,然后就可以对其进行操作了
with open("test.txt", "r") as f:
allData = f.readlines()
for line in allData:
pass
3.2 读取csv文件
csv文件可以用来存固定字段的数据,使用率很高,那么如何操作csv文件呢
import csv
import codecs
from itertools import islice
# 读取csv文件
data = csv.reader(codecs.open("test.csv", "r", encoding="utf_8_sig"))
if data:
for line in islice(data, 1, None):
pass
注意:python读取csv文件比较简单:但是通常会遇到两个问题:
(1) 中文乱码问题。通过codecs提供的open方法,在打开文件时指定编码类型,然后通过csv的reader方法读取文件,可以避免编码问题
(2) 跳过csv的第一行。我们都知道csv文件第一行都会定义为字段名,所以在读取时一般都会跳过第一行。即islice()函数,它返回一个迭代器,第一个参数指定迭代对象,第二个参数指定开始迭代的位置,第三个参数指定结束位。
3.3 读取json
json是一种清香剂的数据交换格式,被广泛使用,python也可以读取操作json文件/数据
import json
with open("test.json", "r") as f:
data = f.read()
json_data = json.loads(data)