Python自动化测试实战篇(4)selenium+unttest+ddt实现自动化用例测试,模拟用户登陆点击交互测试,Assert捕获断言多种断言
创始人
2024-05-24 16:12:18
0

在这里插入图片描述
这些是之前的文章,里面有一些基础的知识点在前面由于前面已经有写过,所以这一篇就不再详细对之前的内容进行描述
Python自动化测试实战篇(1)读取xlsx中账户密码,unittest框架实现通过requests接口post登录网站请求,JSON判断登录是否成功

Python自动化测试实战篇(2)unittest实现批量接口测试,并用HTMLTestRunner输出测试报告

Python自动化测试实战篇(3)优化unittest批量自动化接口测试代码,ddt驱动+yaml实现用例调用,输出HTMLTestRunner测试报告

代码已上传有需求可以自行下载
Python自动化测试实战篇(4)代码

需求

我目前的需求就是针对这个登录接口进行模拟用户批量进行登录测试,登陆完后再点击登录查看登录之后服务器返回的结果,尝试用各种方式去登陆然后查看服务器是否能够返回我们期望的值和数据。
在这里插入图片描述

结果样例图

在这里插入图片描述

1.新建一个lojump.yaml文件存放登录用户名和密码的测试用例

- userAccount: 'admin'loginPwd: '123456'
- userAccount: 'admin'loginPwd: '123Aa'
- userAccount: 'admin1'loginPwd: ''
- userAccount: ''loginPwd: ''
- userAccount: ''loginPwd: '123456'

2.将必要的包导入

from selenium import webdriver
from selenium.webdriver.common.by import By
import os  # 导入路径拼接
import requests
import time
import unittest
import yaml  # 导入yaml模块获取yaml文件值
from ddt import ddt, data, unpack  # 导入数据驱动
from HTMLTestRunner3_New import HTMLTestRunner

3.模拟测试前配置一些相应环境

导入本地的lojump.yaml文件,要使用utf-8格式不然会出现乱码

f = open(os.path.join(‘D:\pythonpj\pytest\lojump.yaml’), ‘r’, encoding=‘utf-8’)

加载yaml文件这里一定要使用safe_load不然会报错

ts_et = yaml.safe_load(f)

设置一个url我这里使用的是cms环境你可以自行查找,这里我直接使用requests的Post方法来进行请求

url = ‘http://192.168.52.129:8080/cms/manage/loginJump.do’

设置一个url请求头

headers = {‘Content-Type’: ‘application/x-www-form-urlencoded’}

设置交互点击地址的url

drurl = ‘http://192.168.52.129:8080/cms/manage/login.do’

4.使用selenium模拟用户点击

这里需要了解的是,首先定位不能够错误,如果定位错误那么后续的结果就是找不到,我这边模拟键盘输入的内容就是直接从yaml里面获取的,yaml头命名一定要跟你在dict[‘’]中请求的名称一样不然的话也是无法输入成功

        option = webdriver.ChromeOptions()option.add_experimental_option("detach", True)driver = webdriver.Chrome(chrome_options=option)driver.get(drurl)time.sleep(2)driver.find_element(By.XPATH, '//*[@id="userAccount"]').send_keys(dict['userAccount'])driver.find_element(By.XPATH, '//*[@id="loginPwd"]').send_keys(dict['loginPwd'])driver.find_element(By.XPATH, '//*[@id="loginBtn"]').click()

5.用requsts中Post请求接口

reps = requests.post(url=url, headers=headers,data={'userAccount': dict['userAccount'],'loginPwd': dict['loginPwd']})

6.设置断言

这个断言个规则根据服务器返回的值来进行捕获,有什么返回值就捕获什么返回值即可。

js = reps.json()if js['msg'] == '登录成功!':  # 设定断言assert js['msg'] == '登录成功!'  # 捕获断言print('恭喜你接口登录成功')elif js['msg'] == '登录密码不正确!':assert js['msg'] == '登录密码不正确!'print('密码不正确')elif js['msg'] == '登录密码不能为空!':assert js['msg'] == '登录密码不能为空!'print('密码不能为空')elif js['msg'] == '登录帐号不能为空!':assert js['msg'] == '登录帐号不能为空!'print('账户不能为空')else:print('接口登录不成功')

7.测试单元完整代码

@ddt
class lg(unittest.TestCase):#定义一个类继承单元@data(*ts_et)@unpackdef test_logjump(self, **dict):  # 定义一个测试用例option = webdriver.ChromeOptions()option.add_experimental_option("detach", True)driver = webdriver.Chrome(chrome_options=option)driver.get(drurl)time.sleep(2)driver.find_element(By.XPATH, '//*[@id="userAccount"]').send_keys(dict['userAccount'])driver.find_element(By.XPATH, '//*[@id="loginPwd"]').send_keys(dict['loginPwd'])driver.find_element(By.XPATH, '//*[@id="loginBtn"]').click()reps = requests.post(url=url, headers=headers,data={'userAccount': dict['userAccount'],'loginPwd': dict['loginPwd']})time.sleep(2)js = reps.json()if js['msg'] == '登录成功!':  # 设定断言assert js['msg'] == '登录成功!'  # 捕获断言print('恭喜你接口登录成功')elif js['msg'] == '登录密码不正确!':assert js['msg'] == '登录密码不正确!'print('密码不正确')elif js['msg'] == '登录密码不能为空!':assert js['msg'] == '登录密码不能为空!'print('密码不能为空')elif js['msg'] == '登录帐号不能为空!':assert js['msg'] == '登录帐号不能为空!'print('账户不能为空')else:print('接口登录不成功')driver.quit()

8.输出HTMLTestRunner测试报告

def logjum():a1_path = os.path.abspath(os.path.dirname(__file__))report_path = os.path.join(a1_path, '用例测试报告.html')discre = unittest.defaultTestLoader.discover(start_dir=a1_path, pattern='g2.py')p = open(report_path, 'wb')run = HTMLTestRunner(stream=p, title='登录接口用例测试报告', description='执行情况', tester='you')run.run(discre)

9.执行

这里需要注意的是unittest.main()中一定要加入for循环1次,不然执行完操作之后就会出现无限循环下去的可能性,之前接口测试的时候没有出现这个bug,但是在selenium加进去后就出现了这个bug也不知道是什么问题引发。

if __name__ == '__main__':logjum()for i in range(0):unittest.main()

10.结果

可以看到执行完成,时间是58秒
在这里插入图片描述
登录接口也显示了执行了多条断言成功,并成功显示我们捕获的内容,当然我这里只是根据我的一些用例进行测试,你也可以自己多写几千条进行也没问题。
在这里插入图片描述
在这里插入图片描述

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...