一、基本概念
1. 库:库是由代码集合的一个产品,可供程序员调用。
- 面向对象的代码组织形成的库叫类库;
- 面向过程的代码组织形成的库叫函数库。
2. 框架:是为了解决一个或一类问题而开发的产品,用户一般只需要使用框架提供的类或函数,即可实现全部功能。
3. 工具: 工具与框架类似,提供了更高层次的封装,屏蔽了底层代码,提供了单独的操作界面供用户使用。
二、自动化测试模型
1. 线性测试
通过录制或编写对应用程序的操作步骤会产生相应的线性脚本,每个线性脚本想对独立,且不产生依赖与调用。
2. 模块化测试
把重复的操作单独封装成公共模块。
3. 数据驱动测试
数据的改变驱动自动化测试的执行,最终引起测试结果的改变。
4. 关键字驱动测试
又称为表驱动测试或基于动作字测试。把自动化操作封装成关键字,避免测试人员直接接触代码,多以填表格的形式降低脚本的编写难度。
三、模块化与参数化
class Mail:
def __init__(self, driver):
self.driver = driver
login_frame = self.driver.find_element_by_tag_name("iframe")
self.driver.switch_to.frame(login_frame)
def login(self, username, password):
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_id("dologin").click()
from selenium import webdriver
from time import sleep
from module import Mail
driver = webdriver.Chrome()
driver.get("https://www.126.com")
mail = Mail(driver)
mail.login("", "")
sleep(5)
driver.quit()
四、读取数据文件
1. 读取txt文件
from selenium import webdriver
from time import sleep
from module import Mail
driver = webdriver.Chrome()
driver.get("https://www.126.com")
# 读取文件,以“r”的方式打开文件
with(open("./data_file/user_info.txt", "r")) as user_file:
# 读取文件中的所有行,并按行返回到list
data = user_file.readlines()
# 格式化处理
users = []
for line in data:
# line[:-1]去除最后一个元素“\n”,split()通过冒号对每行数据进行拆分
user = line[:-1].split(":")
users.append(user)
mail = Mail(driver)
mail.login(users[0][0], users[0][1])
mail.login(users[1][0], users[1][1])
mail.login(users[2][0], users[2][1])
mail.login(users[3][0], users[3][1])
sleep(2)
driver.quit()
2. 读取CSV文件
import csv
# python标准的模块编码和解码器
import codecs
from itertools import islice
# 读取本地csv文件
data = csv.reader(codecs.open('./data_file/user_info.csv', 'r', 'GBK'))
# 存放用户数据
users = []
# 循环输出每行信息,islice()返回一个迭代器,第一个参数表示迭代对象,第二个表示开始位置,第三个表示结束位置
for line in islice(data, 1, None):
users.append(line)
# 打印
print(users)
3. 读取XML文件
<?xml version="1.0" encoding="utf-8" ?>
<info>
<platforms>
<platform>Windows</platform>
<platform>Linux</platform>
<platform>macOS</platform>
</platforms>
<browsers>
<browser>Firefox</browser>
<browser>Chrome</browser>
<browser>Edge</browser>
</browsers>
<url>http://www.xxxx.com</url>
<login username="admin" password="123456"/>
<login username="guest" password="654321"/>
</info>
from xml.dom.minidom import parse
# 打开xml文件
dom = parse('./data_file/config.xml')
# 得到文档元素对象
root = dom.documentElement
# 获取(一组)标签
tag_name = root.getElementsByTagName('platform')
print(tag_name[0].firstChild.data)
print(tag_name[1].firstChild.data)
print(tag_name[2].firstChild.data)
login_info = root.getElementsByTagName('login')
# 获得login标签的username属性值
username = login_info[0].getAttribute('username')
print(username)
# 获得login标签的password属性值
password = login_info[0].getAttribute('password')
print(password)
# 获得login标签的username属性值
username = login_info[1].getAttribute('username')
print(username)
# 获得login标签的password属性值
password = login_info[1].getAttribute('password')
print(password)
4. 读取JSON文件
[
{"username": "", "password": ""},
{"username": "", "password": "123"},
{"username": "user", "password": ""},
{"username": "error", "password": "error"},
{"username": "admin", "password": "admin123"}
]
import json
with open("./data_file/user_info.json", "r") as f:
data = f.read()
user_list = json.loads(data)
print(user_list)