一、自动化测试模型分类
1、线性测试
每个线性脚本相对独立,不产生依赖与调用。即单纯的模拟用户完整的操作场景。
缺点:不易维护
2、模块化与类库
把重复的操作单独封装成公共模块,提高可维护性。
3、数据驱动测试
如在测试登陆,用户名密码数据不同,模块化无法解决这问题,所以数据驱动测试概念被提出。
4、关键字驱动测试
会把自动化操作封装为“关键字”,避免测试人员直接接触代码,多以“填表格”的形成降低脚本的编写难度。即可视化界面。
# 二、模块话与参数化
# driver.get('https://www.126.com/')
# element = driver.find_element(By.CSS_SELECTOR, '[id^=x-URS-iframe]')
# driver.switch_to.frame(element) # 切换到对应的子frame下(只能子frame,不能孙frame)
# user = driver.find_element(By.NAME, 'email')
# user.clear()
# user.send_keys("smile")
# pwd = driver.find_element(By.NAME, 'password')
# pwd.clear()
# pwd.send_keys("XINGFU")
# driver.find_element(By.ID, 'dologin').click()
# sleep(10)
# driver.find_element(By.ID, '_mail_icon_0_0').click()
# sleep(10)
# driver.find_element(By.XPATH, '/html/body/div[5]/div[5]/div[7]').click()
# 其余内容见test_mail.py和login_out.py
1、test_mail.py
# 二、模块化与数据化
# 调用Mail类中的登陆登出方法
# import codecs
# import csv
# import json
# from itertools import islice
# from os.path import abspath, dirname
# from time import sleep
# from xml.dom.minidom import parse
# from selenium import webdriver
# from selenium.webdriver.common.by import By
# from studyPython.sample.login_out import Mail
# options = webdriver.ChromeOptions()
# options.add_experimental_option('detach', True) # 不自动关闭浏览器
# driver = webdriver.Chrome(options=options)
# driver.get('https://www.126.com/')
# mail = Mail(driver)
# 1》单个
# mail.login()
# 2》多个
# mail.login('smile','XINGFU')
# 三、读取文件
# 1》txt数据文件
# element = driver.find_element(By.CSS_SELECTOR, '[id^=x-URS-iframe]') # 已经切换进去iframe了,循环的时候就不能在切换了,获取不到元素
# driver.switch_to.frame(element) # 切换到对应的子frame下(只能子frame,不能孙frame)
# # 读取文件
# path = dirname(abspath(__file__))
# with open(path + '/files/login.txt', 'r') as user_file:
# data = user_file.readlines()
# # 格式化处理
# print("len", len(data))
# for line in range(len(data)):
# user, pwd = data[line][:-1].split(":")
# mail.login(user, pwd)
# 2》CSV文件
# element = driver.find_element(By.CSS_SELECTOR, '[id^=x-URS-iframe]') # 已经切换进去iframe了,循环的时候就不能在切换了,获取不到元素
# driver.switch_to.frame(element) # 切换到对应的子frame下(只能子frame,不能孙frame)
# # 读取文件
# path=dirname(abspath(__file__))+'/files/csvStudy.csv' #导入CSV文件,需要下载CSV存放的插件,否则不能显示中文
# print(path)
# data=csv.reader(codecs.open(path,'r','utf_8_sig'))
# for line in islice(data,1,None):
# print(line)
# mail.login(line[0], line[1])
# 3>XML文件
# path = dirname(abspath(__file__)) + '/files/config.xml'
# print(path)
# # 打开文件
# dom = parse(path)
# # 得到元素对象
# root = dom.documentElement
# print("nodeName:", root.nodeName)
# names = root.getElementsByTagName('name')
# print(names[0].firstChild.data)
# print(names[1].firstChild.data)
# print(names[2].firstChild.data)
# logins = root.getElementsByTagName('login')
# uname_0 = logins[0].getAttribute('uname')
# print(uname_0)
# pwd_1 = logins[1].getAttribute('pwd')
# print(pwd_1)
# 4>json文件
# path = dirname(abspath(__file__)) + '/files/userinfo.json'
# with open(path, 'r') as userFile:
# data = userFile.read()
# print(data)
# userList = json.loads(data)
# print(userList)
# mail.logout()
2、login_out.py
#存放登陆和退出
from time import sleep
from selenium.webdriver.common.by import By
class Mail:
def __init__ (self,driver):
self.driver=driver
# 登陆-某一个用户
# def login(self):
# element = self.driver.find_element(By.CSS_SELECTOR, '[id^=x-URS-iframe]')
# self.driver.switch_to.frame(element) # 切换到对应的子frame下(只能子frame,不能孙frame)
# user = self.driver.find_element(By.NAME, 'email')
# user.clear()
# user.send_keys("smile")
# pwd = self.driver.find_element(By.NAME, 'password')
# pwd.clear()
# pwd.send_keys("XINGFU")
# self.driver.find_element(By.ID, 'dologin').click()
# sleep(10)
# self.driver.find_element(By.ID, '_mail_icon_0_0').click()
# 登陆-传参N个用户
# def login(self,uname,pwd):
# sleep(3)
# element = self.driver.find_element(By.CSS_SELECTOR, '[id^=x-URS-iframe]')
# self.driver.switch_to.frame(element) # 切换到对应的子frame下(只能子frame,不能孙frame)
# user = self.driver.find_element(By.NAME, 'email')
# user.clear()
# user.send_keys(uname)
# password = self.driver.find_element(By.NAME, 'password')
# password.clear()
# password.send_keys(pwd)
# self.driver.find_element(By.ID, 'dologin').click()
# 登陆-传txt文件用户
def login(self,uname,pwd):
sleep(3)
user = self.driver.find_element(By.NAME, 'email')
user.clear()
user.send_keys(uname)
password = self.driver.find_element(By.NAME, 'password')
password.clear()
password.send_keys(pwd)
self.driver.find_element(By.ID, 'dologin').click()
# 退出
def logout(self):
sleep(5)
self.driver.find_element(By.ID, '_mail_icon_0_0').click()
sleep(5)
self.driver.find_element(By.XPATH, '/html/body/div[5]/div[5]/div[7]').click()
3、项目结构