性能测试和自动化测试
1. 自动化测试
1.1. selenium自动化测试函数
# 浏览器参数配置
options = webdriver.EdgeOptions()# 添加无头模式
# options.add_argument("-headless")
# 页面加载策略
# options.page_load_strategy = "normal" # 等待所有资源加载完成
options.page_load_strategy = "eager" # DOM访问就绪
# options.page_load_strategy = "none" # 完全不阻塞,直接往下执行脚本
- 创建浏览器驱动对象
# 创建浏览器对象
driver = webdriver.Edge(service=Service(EdgeIns), options=options
- 打开浏览器网页对象
# 访问浏览器页面
driver.get('https://www.baidu.com')
- 查找元素并点击
# driver.find_element(By.CSS_SELECTOR, "#su").click()
- 查找元素并输入文本
# # 百度输入框输入“迪丽热巴”,清除之后输入比特就业课
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("迪丽热巴")
- 清除输入框内容
driver.find_element(By.CSS_SELECTOR, "#kw").clear()
- 获取元素文本信息
text = driver.find_element(By.CSS_SELECTOR,"#su").text
print(text)
- 获取元素属性值
# 获取百度一下的文字
text = driver.find_element(By.CSS_SELECTOR,"#su").get_attribute("value")
print(text)
- 获取页面标题和URL
title = driver.title
url = driver.current_url
- 获取页面句柄切换页面句柄
# 获取页面标题和url
print("before:" + driver.title)
print("before:" + driver.current_url)
time.sleep(2)
driver.find_element(By.CSS_SELECTOR, "#s-top-left > a:nth-child(6)").click()
time.sleep(2)
# 获取当前页面句柄
curHandle = driver.current_window_handle
# 获取所有页面句柄
allHandle = driver.window_handles
# 遍历所有句柄切换到新页面
for handle in allHandle:if handle != curHandle:driver.switch_to.window(handle)print("after:" + driver.title)
print("after:" + driver.current_url)
- 设置窗口大小
# 设置窗口大小
# 最大化
driver.maximize_window()
# 最小化
driver.minimize_window()
# 全屏
driver.fullscreen_window()
# 自定义大小
driver.set_window_size(1024,100)
- 各种弹窗
# 警告弹窗
driver.get("file:///D:/file/%E6%AF%94%E7%89%B9%E6%95%99%E5%8A%A1/%E6%B5%8B%E8%AF%95/%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/selenium-html/alert.html#")
time.sleep(2)
#点击调起弹窗
driver.find_element(By.CSS_SELECTOR,"#tooltip").click()#切换到弹窗
alert = driver.switch_to.alert
time.sleep(2)
#确定/取消
# alert.accept()
alert.dismiss()
time.sleep(2)
#弹窗关闭之后才能执行下面的代码
driver.find_element(By.CSS_SELECTOR,"#tooltip").click()#确认弹窗
driver.get("file:///D:/file/%E6%AF%94%E7%89%B9%E6%95%99%E5%8A%A1/%E6%B5%8B%E8%AF%95/%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/selenium-html/confirm.html")
driver.find_element(By.CSS_SELECTOR,"body > input[type=button]").click()
time.sleep(2)
#切换弹窗
alert = driver.switch_to.alert
#确定/取消
# alert.accept()
alert.dismiss()time.sleep(2)# 提示弹窗---输入框
driver.get("file:///D:/file/%E6%AF%94%E7%89%B9%E6%95%99%E5%8A%A1/%E6%B5%8B%E8%AF%95/%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/selenium-html/Prompt.html")
time.sleep(2)
#点击调起弹窗
driver.find_element(By.CSS_SELECTOR,"body > input[type=button]").click()
time.sleep(2)
#输入文本+确定+取消
alert = driver.switch_to.alert
#肉眼看不到在弹窗上输入的文本信息
alert.send_keys("比特就业课")
time.sleep(2)
# alert.accept()
alert.dismiss()
# time.sleep(2)
- 添加屏幕截图
# 添加屏幕截图
# filename = "./test.png"
# driver.save_screenshot(filename)
# 进阶版本
# autotest-2024-05-08-104723.png
filename = "./images/"+"autotest-" + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S") + ".png"
driver.save_screenshot(filename)
- 等待
# 添加等待
# 1. 隐式等待,作用于整个全局代码
driver.implicitly_wait(3)
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("天涯论坛")
driver.find_element(By.CSS_SELECTOR, "#su").click()
# 创建显示等待
wait = WebDriverWait(driver, 3)
# > div > div > div.new-tag_4ozgi.new-text-link_3k9GD > div > div.flex-wrapper-top_3ucFS > div.flex-col-left_3trtY.baike-wrapper_6AORN.cu-pt-xs-lg.baike-wrapper-pc_26R04.cu-pt-xl.baike-wrapper-left-pc_5eYY8.cos-space-pb-sm > div > div > p > span:nth-child(1) > span
# wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,"#\\31 > div > div > div ")))
driver.get("file:///D:/file/%E6%AF%94%E7%89%B9%E6%95%99%E5%8A%A1/%E6%B5%8B%E8%AF%95/%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB""%B6/selenium-html/alert.html")
driver.find_element(By.CSS_SELECTOR, "#tooltip")
# 等到弹窗是否出现
wait.until(EC.alert_is_present())
driver.switch_to.alert.accept(
- 网页导航操作
# 网页导航操作
driver.back()
time.sleep(2)
driver.forward()
time.sleep(2)
driver.refresh()
time.sleep(2)
1.2. 如何书写性能测试测试报告
2. 性能测试
2.1. 知识点和工具使用
2.1.1. 测试工具:
- 接口测试:postman
- jmeter:性能测试,性能测试报告
- 抓包工具:fiddler
2.1.2. 基础概念
常见性能测试指标:
- 并发数
- 吞吐量
- 响应时间
- 资源利用率
测试类型:
2.1.3. 使用jmeter进行性能测试
2.1.3.1. 打开jmeter
双击打开
打开之后是英文的界面,如果想要更改成中文的话可以更改配置文件,这样能够永久设置成为中文
2.1.3.2. 新建线程组
注意事项:
2.1.3.3. 添加http接口测试请求
2.1.3.4. 添加查看结果树
2.1.3.5. 添加登录凭证(user_token_header)
填写user_token_header就可以不用登录就可以访问到页面了。
2.1.3.6. 添加json提取器
部分json用法
添加json变量
检查自己写的json是否正确
避免json被覆盖,因为jmeter里面的作用于是树形结构的,所以可以将文件拖拽成子集以保证正确作用域。
2.1.3.7. 添加json断言
作用:使用json断言可以判断元素数据是否存在,是否访问符合预期值
选项:
2.1.3.8. 防止Content-Type不一致
因为两次的Content-Type不一致所以会请求失败,添加博客失败
当修改添加Content-Type之后
成功了
2.1.3.9. 查看线程状态
2.1.3.10. 实现并发效果(添加同步定时器)
设定并发数
- 模拟用户组数量不能超过线程组配置的线程数(用户数),不然会导致阻塞
- 如果低于配置的线程数的话最好将循环打开,避免达不到并发数。
导致阻塞
一直在突触退不出来
2.1.3.11. 添加事务控制器
2.1.3.12. CSV文件数据文件设置(实现多用户登录操作)
使用Excel创建的CSV文件
保存的时候使用CSV格式
填写参数
第一次登录
第二次登陆
2.1.3.13. 添加事务控制器
添加事务控制器之后的聚合报告
2.1.3.14. http Cookie管理器
2.1.3.15. 梯度线程组
使用这个可以逐步增加线程数来达到测压的效果。
2.1.3.16. 常见监听器
2.1.3.16.1. 聚合报告
2.1.3.16.2. Response Times Over Time
2.1.3.16.3. TransactionsperSecond(TPS)
2.1.4. 性能测试测试报告
2.1.4.1. 命令
注意:
一般查看结果树只是用于调试阶段。