我们在web测试过程中,有些繁琐重复的测试行为完全可以用自动化来代替,例如每次迭代版本发布到线上后,我们可能都需要检查下历史的主要功能,如登录,下载,上传,充值等等,那么这些如果写成自动化脚本,每次检查时自己运行,我们腾出手来做别的是不是更好点呢。本篇文章来分享一下自动化上传,然后通过获取上传请求的响应信息,断言是否上传成功因为我们接口响应是固定的格式,所以可以采用正则表达式的方法
响应值:{\\"content_imgs\\":\\"https://xxxx.zffffo.com/92d03d102d2371ee80020764a3fd0102/snapshots/12d6172a4c3f4c3c850b53bdafb8fc0c-00001.jpg\\",\\"content_video\\":\\"https://xxxx.zffffo.com/sv/36c0ab71-1899bafb2eb/36c0ab71-1899bafb2eb.mp4\\"}"}'
from seleniumwire import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import requests, json
import re # 这里导入re模块,用于处理正则表达式
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select # 导入selenium库里面的Select
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys # 导入键盘操作包
# 创建一个浏览器对象
driver = webdriver.Chrome()
# 打开网站
driver.get("https://www.xxxxx.com/") #你要打开的网址
time.sleep(3)# 等待页面加载完成
driver.maximize_window()# 浏览器最大化
login_button = driver.find_element(By.ID, "loginsuccessnews").click()# 点击账号密码登录
login_account =driver.find_element(By.XPATH,"/html/body/div[2]/div/div[2]/div/div[2]/div/div/div/div[1]/div[2]/div").click()
tel = driver.find_element(By.XPATH, "//*[@id='phone']/span").click()
input = driver.find_element(By.XPATH, "//input[@placeholder='请输入手机号']").send_keys('1598888264')
password = driver.find_element(By.XPATH, "//*[@id='password']/span").click()
input = driver.find_element(By.XPATH, "//input[@placeholder='请输入密码']").send_keys('Wzw8264')
# 登录按钮点击
button = driver.find_element(By.XPATH, "//div[@class='login-btn___xEPyC']").click()
#打开上传页面
driver.get('https://www.xxxx.com/upload.html')
upload =driver.find_element(By.XPATH,"//div[@class='actionBox___376ZY']//div[3]//img[1]").click()
#找到文本输入框并点击
text=driver.find_element(By.XPATH,"//div[@class='tabPane___2ZHsYactive___z3IB1']//div[@class='textWrap___2y7AH']").click()
# 文本框输入内容
input=driver.find_element(By.XPATH,"//div[@class='tabPane___2ZHsYactive___z3IB1']//textarea[@placeholder='请输入正文(500字以内)']").send_keys('随意输入的标题')
# 以下开始上传压缩包
uploadfilebutton = driver.find_element(By.XPATH,"//div[@class='tabPane___2ZHsYactive___z3IB1']//div[@class='uploadName___NmqCM']").click()#视频文件存放地址
file_name = 'C:\\Users\\xxxx\\Desktop\\0e54acffbadd5c73eb86c3a138cd969b.mp4'
driver.find_element(By.XPATH,"//span[@class='ant-upload']//input").send_keys(file_name)# 将压缩包添加至上传窗口
querenshangchuan = driver.find_element(By.XPATH,"//div[@class='confirmBtn___1sDm3']").click()# 确认上传按钮
publish = driver.find_element(By.XPATH,"//div[@class='confirmBtn___r_eCa']").click()# 点击发布按钮
def Assertion():#创建一个断言方法
found = False
entries = driver.requests # 使用driver.requests属性来获取所有请求信息
for entry in entries:
if entry.url == "https://xxxxxx/sssss/adddddd":#接口名称
response = entry.response # 这里获取响应对象
response_body = response.body # 这里获取响应内容
response_dict = json.loads(response_body) # 这里将响应内容转换为字典
data = response_dict["data"] # 这里获取data字段的值
data_dict = json.loads(data) # 这里将data字段的值转换为字典
# 定义一个正则表达式,用于匹配以https://xxxx.zffffo.com/开头,以.jpg结尾的字符串
img_pattern = r"^https://xxxx.zffffo.com/.+\.jpg$"
# 定义一个正则表达式,用于匹配以https://haokeplay.znzmo.com/sv/开头,以.mp4结尾的字符串
video_pattern = r"^https://xxxx.zffffo.com//sv/.+\.mp4$"
# 这里使用in运算符和re.match函数来检查data_dict中是否包含content_imgs和content_video字段,并且它们的值是否符合正则表达式
if "content_imgs" in data_dict and "content_video" in data_dict and re.match(img_pattern, data_dict[
"content_imgs"]) and re.match(video_pattern, data_dict["content_video"]):
print(entry.response.body)
print("data中包含了content_imgs和content_video字段,上传成功")
else:
print("data中没有包含content_imgs和content_video字段,可能上传失败")
found = True
return True
break
if not found:
print("警告:没有找到https://xxxx.zffffo.com/接口的请求和响应信息,请检查")
return False
driver.quit()
if __name__ == '__main__':
if Assertion():
print('成功')
else:
print('失败')
driver.quit()
#根据自身需要可以无限新增其他场景应用上面的方法