当前位置: 首页 > wzjs >正文

个人网站备案核验单网站开发包含哪些类别

个人网站备案核验单,网站开发包含哪些类别,摄影师个人网站制作,设计一套网站价格接口对象封装 1.requests和pymysql实现ihrm登录接口缺点 : 代码冗余度高,耦合度高,维护成本大 核心思想 : 代码分层 按代码功能划分 : 接口对象层 : 负责发送http请求,访问待测接口,返回响应数据测试用例层 : 调用接口,按照响应数据,断言完成测试 封装tpshop商城 普通方式…

接口对象封装

1.requests和pymysql实现ihrm登录接口缺点 : 代码冗余度高,耦合度高,维护成本大

核心思想 : 代码分层

  • 按代码功能划分 :
    • 接口对象层 : 负责发送http请求,访问待测接口,返回响应数据
    • 测试用例层 : 调用接口,按照响应数据,断言完成测试

封装tpshop商城

  • 普通方式实现
# 导包----我的tpshop有问题,故省略url
import requests# 创建session对象
session=requests.Session()
# 发送验证码请求get
session.get(url="")
# 发送登录请求 post
resp=session.post(url="",date={"username":"12345678","password":"123456","varify":"8888"})
# 打印响应结果
print("登录结果:",resp.json())
登录接口对象层
  1. 封装思想 :
    • 将普通方式实现代码中固定不变的,直接写到方法的实现内部
    • 将动态变化的,从参数传入
    • 将响应结果,通过返回值return
  • 示例分析:

在这里插入图片描述
在这里插入图片描述

import requests# 封装tpshop商城,接口对象层
class TpshopLoginApi(object):@classmethod# 获取验证码---普通实现固定不变def get_verify(cls,session):session.get(url="http://tpshop-test.itcast.itheima.net/index.php?m=Home&c=User&a=verify")# 登录@classmethoddef login(cls,session,login_data):resp=session.post(url="http://tpshop-test.itcast.itheima.net/index.php?m=Home&c=User&a=verify",date=login_data)# 返回值return resp# 验证:测试自己封装的接口,功能是否正常
if __name__=='__main__':session=requests.Session()# 发送获取验证码请求TpshopLoginApi.get_verify(session)login_data={"username":"12345678","password":"123456","varify":"8888"}# 发送登录请求response=TpshopLoginApi.login(session,login_data)print("登录结果:",response.json())

具体实现:

1.将普通实现代码中,固定不变的和动态变换的,不变的写到参数内部,动态的通过参数传过去
2.有返回值通过return做返回
3.写测试的代码进行测试
登录接口测试用例层
  • 使用pytest框架,调用自己封装的Api发送请求,获取响应结果,断言,完成接口测试!
  • 优化前
import requestsfrom py_tpshopFZ import TpshopLoginApiclass TestTpshopLogin(object):# 定义测试方法 - 登录成功def test01_login_success(self):# 创建session实例session=requests.Session()# 调用自己封装的api,发送获取验证码请求TpshopLoginApi.get_verify(session)# 准备请求体数据req_data={"username":"12345678","password":"123456","verify":"8888"}# 调用自己封装的API,发送登录请求resp=TpshopLoginApi.login(self,req_data)# 打印响应结果:print("登录成功:",resp.json())# 断言assert 200 == resp.status_code()assert 1 == resp.json().get("status")assert "登陆成功" in resp.json().get("msg")# 定义测试方法 - 密码错误def test02_pwd_err(self):# 创建session实例session = requests.Session()# 调用自己封装的api,发送获取验证码请求TpshopLoginApi.get_verify(session)# 准备请求体数据req_data = {"username": "12345678", "password": "1234561212", "verify": "8888"}# 调用自己封装的API,发送登录请求resp = TpshopLoginApi.login(self, req_data)# 打印响应结果:print("密码错误:", resp.json())# 断言assert 200 == resp.status_code()assert -2 == resp.json().get("status")assert "密码错误" in resp.json().get("msg")# 定义测试方法 - 验证码错误def test03_verify_err(self):# 创建session实例session = requests.Session()# 调用自己封装的api,发送获取验证码请求TpshopLoginApi.get_verify(session)# 准备请求体数据req_data = {"username": "12345678", "password": "123456", "verify": "9999"}# 调用自己封装的API,发送登录请求resp = TpshopLoginApi.login(self, req_data)# 打印响应结果:print("验证码错误:", resp.json())# 断言assert 200 == resp.status_code()assert 0 == resp.json().get("status")assert "验证码错误" in resp.json().get("msg")
  • 优化后
import requestsfrom py_tpshopFZ import TpshopLoginApiclass TestTpshopLogin(object):# 定义为类属性,使用时类属性可以用类名,实例,self,cls均可引用session = None    # 每个方法调用前都执行一次def setup(self):# 创建session实例self.session=requests.Session()# 调用自己封装的API,发送获取验证码请求---索引类属性语法规范TpshopLoginApi.get_verify(self.session)# 定义测试方法 - 登录成功def test01_login_success(self):# 准备请求体数据req_data={"username":"12345678","password":"123456","verify":"8888"}# 调用自己封装的API,发送登录请求resp=TpshopLoginApi.login(self.session,req_data)# 打印响应结果:print("登录成功:",resp.json())# 断言assert 200 == resp.status_code()assert 1 == resp.json().get("status")assert "登陆成功" in resp.json().get("msg")# 定义测试方法 - 密码错误def test02_pwd_err(self):# 准备请求体数据req_data = {"username": "12345678", "password": "1234561212", "verify": "8888"}# 调用自己封装的API,发送登录请求resp = TpshopLoginApi.login(self.session, req_data)# 打印响应结果:print("密码错误:", resp.json())# 断言assert 200 == resp.status_code()assert -2 == resp.json().get("status")assert "密码错误" in resp.json().get("msg")# 定义测试方法 - 验证码错误def test03_verify_err(self):# 创建session实例session = requests.Session()# 调用自己封装的api,发送获取验证码请求TpshopLoginApi.get_verify(session)# 准备请求体数据req_data = {"username": "12345678", "password": "123456", "verify": "9999"}# 调用自己封装的API,发送登录请求resp = TpshopLoginApi.login(self.session, req_data)# 打印响应结果:print("验证码错误:", resp.json())# 断言assert 200 == resp.status_code()assert 0 == resp.json().get("status")assert "验证码错误" in resp.json().get("msg")

搭建自动基础化框架

  • 名称apiTestFramework(package存放带码,dict存放测试报告)
  • api : 定义封装被测系统的接口
  • scripts : 定义测试用例脚本
  • data : 存放测试数据文件
  • report : 存放生成的测试报告
  • common : 存放通用工具类
  • config.py : 定义项目的配置信息
  • run_suite.py : 执行测试套件的入口

封装ihrm登录

  • 准备数据—>调接口—>得响应结果---->设断言
  • 普通实现
import requestsresp=requests.post(url="https://ihrm-java.itheima.net/api/sys/login",headers={"Content-Type":"application/json"},json={"mobile": "13800000002","password": "929itheima.CN032@.20250528"})print("打印结果:",resp.json())
  • 登录接口用例层---------登录接口封装
import requests# 定义ihrm登录接口 类
class IhrmloginApi(object):# 定义方法@classmethoddef login(cls,rep_data):resp=requests.post(url="https://ihrm-java.itheima.net/api/sys/login",json=rep_data)return resp# 测试接口封装是否成功
if __name__=='__main__':data={"mobile": "13800000002","password": "929itheima.CN032@.20250528"}# 传参进行调用resp=IhrmloginApi.login(data)print("登录成功:",resp.json())
  • 登录接口测试用例层
from api.ihrm_loginapi import IhrmloginApiclass TestIhrmLogin(object):# 定义测试方法--登录成功def test_01_login_success(self):# 准备登录测试数据data = {"mobile": "13800000002","password": "929itheima.CN032@.20250528"}# 调用自己封装的api 获取响应结果resp=IhrmloginApi.login(data)# 打印查看print("登陆成功:",resp.json())# 断言assert 200 == resp.status_codeassert True == resp.json().get('success')assert 10000 == resp.json().get("code")assert '操作成功' in resp.json().get('message')# 定义测试方法--手机号未注册def test_02_mpbile(self):# 准备登录测试数据data = {"mobile": "13800000001", "password": "929itheima.CN032@.20250528"}# 调用自己封装的api 获取响应结果resp = IhrmloginApi.login(data)# 打印查看print("手机号未注册:", resp.json())# 断言assert 200 == resp.status_codeassert False == resp.json().get('success')assert 20001 == resp.json().get("code")assert '用户名或密码错误' in resp.json().get('message')# 定义测试方法--手机号未注册def test_02_pwd_err(self):# 准备登录测试数据data = {"mobile": "13800000002", "password": "itheima.CN032@.20250528"}# 调用自己封装的api 获取响应结果resp = IhrmloginApi.login(data)# 打印查看print("密码错误:", resp.json())# 断言assert 200 == resp.status_codeassert False == resp.json().get('success')assert 20001 == resp.json().get("code")assert '用户名或密码错误' in resp.json().get('message')
  • 封装断言方法:
  1. 在项目目录下, 创建common目录,添加文件assert_tools.py
  2. 在文件assert_tools.py添加通用的断言函数common_assert()
  3. 实现此函数
  4. 在测试脚本层,需要断言的位置,使用这个断言函数来实现
    在这里插入图片描述
"""定义通用的工具函数 实现断言"""# 谁调用就给一个resp
def common_assert(resp,status_code,success,code,message):assert status_code == resp.status_codeassert success is resp.json().get("success")assert code == resp.json().get("code")assert message in resp.json().get("message")
  • 加入断言优化后
from api.ihrm_loginapi import IhrmloginApi
from common.assert_tools import common_assertclass TestIhrmLogin(object):# 定义测试方法--登录成功def test_01_login_success(self):# 准备登录测试数据data = {"mobile": "13800000002","password": "929itheima.CN032@.20250529"}# 调用自己封装的api 获取响应结果resp=IhrmloginApi.login(data)# 打印查看print("登陆成功:",resp.json())# 断言common_assert(resp, 200, True, 10000, "操作成功")# 定义测试方法--手机号未注册def test_02_mobile(self):# 准备登录测试数据data = {"mobile": "13800000001", "password": "929itheima.CN032@.20250529"}# 调用自己封装的api 获取响应结果resp = IhrmloginApi.login(data)# 打印查看print("手机号未注册:", resp.json())# 断言common_assert(resp, 200, False, 20001, "用户名或密码错误")# 定义测试方法--密码错误def test_03_pwd_err(self):# 准备登录测试数据data = {"mobile": "13800000002", "password": "itheima.CN032@.20250529"}# 调用自己封装的api 获取响应结果resp = IhrmloginApi.login(data)# 打印查看print("密码错误:", resp.json())# 断言common_assert(resp, 200, False, 20001, "用户名或密码错误")# 电话号码为空def test_04_mobile_is_none(self):# 准备登录测试数据data = {"mobile": "", "password": "929itheima.CN032@.20250529"}# 调用自己封装的api 获取响应结果resp = IhrmloginApi.login(data)# 打印查看print("手机号为空:", resp.json())# 断言common_assert(resp, 200, False, 20001, "用户名或密码错误")# 电话有特殊字符def test_05_mobile_have_special_char(self):# 准备登录测试数据data = {"mobile": "1213#######", "password": "929itheima.CN032@.20250529"}# 调用自己封装的api 获取响应结果resp = IhrmloginApi.login(data)# 打印查看print("手机号有特殊字符:", resp.json())# 断言common_assert(resp, 200, False, 20001, "用户名或密码错误")# 10位电话号码def test_06_mobile10(self):# 准备登录测试数据data = {"mobile": "", "password": "929itheima.CN032@.20250529"}# 调用自己封装的api 获取响应结果resp = IhrmloginApi.login(data)# 打印查看print("10位手机号", resp.json())# 断言common_assert(resp, 200, False, 20001, "用户名或密码错误")# 12位电话号码def test_07_mobile12(self):# 准备登录测试数据data = {"mobile": "111111111111", "password": "929itheima.CN032@.20250529"}# 调用自己封装的api 获取响应结果resp = IhrmloginApi.login(data)# 打印查看print("12位手机号:", resp.json())# 断言common_assert(resp, 200, False, 20001, "用户名或密码错误")# 密码为空def test_08_pwd_empty(self):# 准备登录测试数据data = {"mobile": "13800000002", "password": None}# 调用自己封装的api 获取响应结果resp = IhrmloginApi.login(data)# 打印查看print("12位手机号:", resp.json())# 断言common_assert(resp, 200, False, 20001, "用户名或密码错误")# 密码有特殊字符def test_09_pwd_have_special_char(self):# 准备登录测试数据data = {"mobile": "13800000002", "password": "929@@@@@"}# 调用自己封装的api 获取响应结果resp = IhrmloginApi.login(data)# 打印查看print("密码有特殊字符:", resp.json())# 断言common_assert(resp, 200, False, 20001, "用户名或密码错误")# 密码1位def test_10_pwd01(self):def test_09_pwd_have_special_char(self):# 准备登录测试数据data = {"mobile": "13800000002", "password": "9"}# 调用自己封装的api 获取响应结果resp = IhrmloginApi.login(data)# 打印查看print("密码1位:", resp.json())# 断言common_assert(resp, 200, False, 20001, "用户名或密码错误")# 密码100位def test_11_pwd100(self):def test_09_pwd_have_special_char(self):# 准备登录测试数据data = {"mobile": "13800000002","password": "929@@@@@@@929@@@@@@@929@@@@@@@929@@@@@@@929@@@@@@@929@@@@@@@929@@@@@@@929@@@@@@@929@@@@@@@"}# 调用自己封装的api 获取响应结果resp = IhrmloginApi.login(data)# 打印查看print("100位密码:", resp.json())# 断言common_assert(resp, 200, False, 20001, "用户名或密码错误")# 多参数def test_12_more_params(self):# 准备登录测试数据data = {"mobile": "13800000002", "password": "929itheima.CN032@.20250529","ara":"demo"}# 调用自己封装的api 获取响应结果resp = IhrmloginApi.login(data)# 打印查看print("登陆成功:", resp.json())# 断言common_assert(resp, 200, True, 10000, "操作成功")# 少参def test_13_less_params(self):# 准备登录测试数据data = {"mobile": "13800000002"}# 调用自己封装的api 获取响应结果resp = IhrmloginApi.login(data)# 打印查看print("少参password:", resp.json())# 断言common_assert(resp, 200, False, 20001, "用户名或密码错误")# 无参def test_14_no_params(self):# 准备登录测试数据data = None# 调用自己封装的api 获取响应结果resp = IhrmloginApi.login(None)# 打印查看print("少参password:", resp.json())# 断言common_assert(resp, 200, False, 99999, "抱歉")# 错误参数def test_15_err_params(self):# 准备登录测试数据data = {"abc": "13800000002","password": "929itheima.CN032@.20250529"}# 调用自己封装的api 获取响应结果resp = IhrmloginApi.login(data)# 打印查看print("无参:", resp.json())# 断言common_assert(resp, 200, False, 20001, "用户名或密码错误")
  • data有相似的值,把登录接口参数化写入json文件
[{"desc": "登录成功","req_date":{"mobile": "13800000002","password": "929itheima.CN032@.20250529"},"status_code":200,"success": true,"code": 10000,"message": "操作成功!"},{"desc": "手机号不存在","req_date":{"mobile": "13800000001","password": "929itheima.CN032@.20250529"},"status_code":200,"success": false,"code": 20001,"message": "用户名或密码错误"},{"desc":"密码错误","req_date":{"mobile": "13800000002","password": "itheima.CN032@.20250529"},"status_code":200,"success": false,"code": 20001,"message": "用户名或密码错误"},{"desc": "手机号为空","req_date":{"mobile": null,"password": "929itheima.CN032@.20250529"},"status_code": 200,"success": false,"code": 20001,"message": "用户名或密码错误"},{"desc": "手机号特殊字符","req_data": {"mobile": "13@######","password": "929itheima.CN032@.20250529"},"status_code": 200,"success": false,"code": 20001,"message": "用户名或密码错误"},{"desc": "10位手机号","req_data": {"mobile": "1323333333","password": "929itheima.CN032@.20250529"},"status_code": 200,"success": false,"code": 20001,"message": "用户名或密码错误"},{"desc": "12位手机号","req_data": {"mobile": "132333333322","password": "929itheima.CN032@.20250529"},"status_code": 200,"success": false,"code": 20001,"message": "用户名或密码错误"},{"desc": "密码为空","req_data": {"mobile": "1323333333","password": null},"status_code": 200,"success": false,"code": 20001,"message": "用户名或密码错误"},{"desc": "密码有特殊字符","req_data": {"mobile": "13800000002", "password": "929@@@@@"},"status_code": 200,"success": false,"code": 20001,"message": "用户名或密码错误"},{"desc": "密码1位","req_data": {"mobile": "13800000002", "password": "9"},"status_code": 200,"success": false,"code": 20001,"message": "用户名或密码错误"},{"desc": "密码100位","req_data": {"mobile": "13800000002", "password": "929@@@@@@@929@@@@@@@929@@@@@@@929@@@@@@@929@@@@@@@929@@@@@@@929@@@@@@@929@@@@@@@929@@@@@@@"},"status_code": 200,"success": false,"code": 20001,"message": "用户名或密码错误"},{"desc": "多参","req_data": {"mobile": "13800000002", "password": "929itheima.CN032@.20250529","ara":"demo"},"status_code": 200,"success": false,"code": 20001,"message": "用户名或密码错误"},{"desc": "少参","req_data": {"mobile": "13800000002"},"status_code": 200,"success": false,"code": 20001,"message": "用户名或密码错误"},{"desc": "无参","req_data":null,"status_code": 200,"success": false,"code": 20001,"message": "抱歉"},{"desc": "错误参数","req_data": {"mobile": "13800000002", "pass": "929itheima.CN032@.20250529"},"status_code": 200,"success": false,"code": 20001,"message": "用户名或密码错误"}
]

参数化

参数化的核心 : 数据驱动(用数据驱动测试用例执行)

  • 数据驱动 : 针对一个接口,只写一个测试方法,用一份测试数据文件,管理各个测试用例的测试数据.
  • 如登录接口:15条测试用例,只需要一个测试方法,对应一个含有15组数据的json文件,进行测试

回顾PyTest

  • 加法函数

文章转载自:

http://4dJ7XVXc.Ltzkk.cn
http://ANwCiewo.Ltzkk.cn
http://BoWUTdDf.Ltzkk.cn
http://tOk0BFrZ.Ltzkk.cn
http://V4WycTdg.Ltzkk.cn
http://xgYV4VK6.Ltzkk.cn
http://Iybw5ZUa.Ltzkk.cn
http://idhg0hpA.Ltzkk.cn
http://xkXSiKpX.Ltzkk.cn
http://n7O6K6uk.Ltzkk.cn
http://6P6Sw9HY.Ltzkk.cn
http://XE1qaLQ0.Ltzkk.cn
http://Ne4Zcu9o.Ltzkk.cn
http://FrIe7Eou.Ltzkk.cn
http://U8nd462m.Ltzkk.cn
http://KzBaBUZJ.Ltzkk.cn
http://jeqnPJZJ.Ltzkk.cn
http://1fzA80mA.Ltzkk.cn
http://ZBBijlqA.Ltzkk.cn
http://brewJx0s.Ltzkk.cn
http://MSUMBIKQ.Ltzkk.cn
http://i3TyBh6m.Ltzkk.cn
http://ORTnVttS.Ltzkk.cn
http://lLNlVzSo.Ltzkk.cn
http://S018xbhy.Ltzkk.cn
http://27RVs4ZZ.Ltzkk.cn
http://eEBW2c6K.Ltzkk.cn
http://Rlzd9XKY.Ltzkk.cn
http://IARelDhZ.Ltzkk.cn
http://iiWGLXQH.Ltzkk.cn
http://www.dtcms.com/wzjs/635474.html

相关文章:

  • 做深圳门户网站起什么名字好nginx 部署 wordpress
  • 温州网站建设和推广江苏省现代化示范校建设网站
  • 可以做兼职的网站推荐趣快排seo是什么
  • joomla功能型网站建设四川省住建厅官方网站
  • 江津网站建设效果好不好室内设计装修大全
  • 上海网站开发兼职做一个网站难不难
  • 做网站推广排名大型移动网站建设
  • 深圳营销型网站建wordpress中实战视频
  • 怎么做网站排版试客网站程序源码
  • 怎么在wordpress上设计网站站长工具永久更新
  • 做网站的公司合肥wordpress网络图片不显示图片
  • 新网站如何做推广中山网站设计收费标准
  • 潍坊恒信建设集团网站常用网站后缀
  • 天津做网站外包公司有哪些专做轮胎的网站
  • 山东网站建设代理浙江省建设执业注册中心网站
  • 大连网站建设选网龙上海网络整合推广
  • 佛山行业网站设计wordpress主题 视频教程
  • 多个wordpress站点互相电商该怎么做起
  • 湖南高端网站制作公司企业管理软件属于系统软件吗
  • 销售网站建设推广展览展示设计网站
  • 静态手机网站基础现在有哪家建筑公司招人
  • 打开一个网站在建设中外贸企业 访问国外网站
  • 网站运营工作是干什么的湖北勘察设计协会
  • wordpress网站文章形式自己怎样做淘客网站
  • 滨湖网站建设网站建设方案 文库
  • 晋城市住建设局网站字牌标识公司网站网站编号 6019
  • 北京燕化工程建设有限公司网站wordpress数据库经常挂
  • 做卖挖掘机的网站百度网站 v怎么怎做
  • 做网站如何赢利的架设网站 软件
  • 帝国cms登录网站长沙房产集团网站建设