继上文所将讲的python+requests+Unittest框架,本文将继续分享python代码的进一步封装思想,来提高代码的整体运行效率及整洁性,本文以接口测试框架为例进行讲解。

关于Unittest单元测试框架的具体使用方法链接链接(点击跳转)↓

API自动化测试-Python+requests+unittest框架介绍https://blog.csdn.net/Liu_GuoXing/article/details/127526943


 接口测试框架目录:

  • api:存放我们自己封装的API接口
  • script:存放python代码,借助unittest框架,调用自己封装的API
  • data:存放数据文件,如用于参数化的数据
  • report:存放生成的测试报告
  • lib:存放第三方库
  • app.py:存放全局数据、公共变量
  • utils.py:存放工具函数、方法
  • run_suite.py:存放批量执行用例,生成测试报告的代码

封装登录接口思路:

  1. 先按普通方式实现HTTP请求
  2. 将请求 封装成自己定义个API接口(存入api中)
  3. 调用自己封装的API,实现接口测试(结合Unittest框架,写入到script)

整体思想:

  • 将固定不变的数据,直接写入到封装的类属性和方法中
  • 将动态变化的数据,通过参数或返回值传递

分析:

  • session:是需要创建而产生的---动态变化的
  • get()方法:不变
  • 获取验证码的url:不变
  • 获取验证码的resp:做返回值进行传出--动态变化的(传出)
  • post()方法:不变
  • 登录的url:不变
  • 登录的headers:不变
  • 登录的data:做参数---动态变化的(传入)
  • 登录的resp:做返回值进行传出--动态变化的(传出)

封装代码:

1.在api目录下创建login_api.py文件

# 在api目录下创建login_api.py
# 创建类
class Login_Api:# 定义属性def __init__(self):self.url_verify = 'xxxx'self.url_login = 'xxxxx'self.headers = 'xxxx'# 定义方法-获取验证码def get_verify(self, my_session):return my_session.get(url=self.url_verify)# 定义方法-登录def login(self, my_session, req_data):return my_session.post(url=self.url_login, headers=self.headers, data=req_data)

2.在script目录中创建测试类文件,从unittest.Testcase类继承并添加setUpClass及tearDownClass和普通方法

# 在script中创建test_login.py
import unittestimport requestsfrom api.login_api import Login_Api
# 导包class LgxLogin(unittest.TestCase):my_session = None@classmethoddef setUpClass(cls) -> None:cls.login_api = Login_Api()# 调用自己封装的类cls.my_session = requests.Session()@classmethoddef tearDownClass(cls) -> None:cls.my_session.close()def test01_login_ok(self):# 登录成功# 调用自己封装的方法获取验证码resp_verify = self.login_api.get_verify(self.my_session)# 调用自己封装的方法实现登录req_data = 'xxxxx'resp_login = self.login_api.login(self.my_session, req_data)# 打印响应结果print(resp_login)# 增加断言-响应状态码self.assertEqual(200, resp_login.status_code)# 增加断言-响应体msg的值为登录成功self.assertIn('登录成功', resp_login.json().get('msg'))def test02_username_not_exits(self):# 用户名不存在# 调用自己封装的方法获取验证码resp_verify = self.login_api.get_verify(self.my_session)# 调用自己封装的方法实现登录req_data = 'AAAAAA'resp_login = self.login_api.login(self.my_session, req_data)# 打印响应结果print(resp_login)# 增加断言-响应状态码self.assertEqual(200, resp_login.status_code)# 增加断言-用户名不存在self.assertIn('用户名不存在', resp_login.json().get('msg'))def test03_pwd_error(self):# 密码错误# 调用自己封装的方法获取验证码resp_verify = self.login_api.get_verify(self.my_session)# 调用自己封装的方法实现登录req_data = 'BBBBB'resp_login = self.login_api.login(self.my_session, req_data)# 打印响应结果print(resp_login)# 增加断言-响应状态码self.assertEqual(200, resp_login.status_code)# 增加断言-响应体msg的值为密码错误self.assertIn('密码错误', resp_login.json().get('msg'))

进一步优化:

  • 将http协议和域名,写入到app.py文件中,当做一个全局变量来存储
  • 将headers存储到app.py文件中,当做一个全局变量来存储
  • 使用到全局变量时导包引用即可

以上就是本文的全部内容了,合理利用封装思想,可以时数据动态管理,应对域名、协议等共用的信息变化时可以通过直接公共方法里的属性值进行全局修改,如有疑问欢迎评论区留言讨论。


❤关注我,不迷路❤

******我的本文相关专栏******

软件测试 & 开发(单击此处进入)


******我的其它作品专栏******

PC常见故障汇总专栏(点击进入)

EXCEL综合场景应用详解(点击此处进入)

全国计算机等级考试-二级python基础(点击此处进入)

Python-代码封装思想相关推荐

  1. python代码封装供第三方使用_python发博客

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python生成csdn博客分享图一.前言我们分享博客的方式有很多种,最常见的无 ...

  2. python代码封装加密_静态编译python源代码,使用Nuitka加密你的py源码

    Nuitka,100%兼容标准python2/python3,静态编译你的python程序 1. 概述 Nuitka(nuitka.net)可以将python代码转换为C++,然后编译为可执行文件,其 ...

  3. 把Python代码封装成exe(windows的可执行程序)

    用专门的模块,把python文件件打包成exe格式文件!这个模块的名字叫:pyinstaller 不能拼错哦.py是python的py,installer是安装器的意思. 安装这个模块的方法:在cmd ...

  4. python代码封装加密_python对煎蛋网加密处理方式

    原标题:python对煎蛋网加密处理方式 最近一直有朋友问我改版的煎蛋网妹子图怎么爬,因为他们花费精力结果抓了一整个文件夹的防盗图.我之前在很久以前的一篇博客说过,对于这种js处理的网页,要想抓取到网 ...

  5. 企业微信消息推送和钉钉消息推送python代码封装

    前言:目前很多公司用的是企业微信或者钉钉,对于服务的可用性都会有一个告警通知,方面我们及时了解信息,这里我做了一个简单的封装,方便大家使用! #!/usr/bin/env python # _*_ c ...

  6. python代码封装加密_对Python源码加密及反编译前后对比

    关于python的加密 目前软件开发商对 Python 加密时可能会有两种形式,一种是对python转成的exe进行 保护,另一种是直接对.py或者.pyc文件进行保护,下面将列举两种形式的保护流程. ...

  7. Python代码封装的可执行exe文件反编译为Py脚本

    起因是笔者有个课,教图形图像学,作业的代码调不出老师的效果,于是就又有了hack的想法,把老师给的用来演示的exe文件反编译.主要是根据这篇文章的方法来的.将 exe 文件反编译成 Python 脚本 ...

  8. 如何将python代码封装成app_python打包成可执行文件app

    1.mac程序打包成app 有两个方案一个 pyinstaller 已经测试过了.没有打包成功. py2app可以成功打包. 2.安装py2app 3.打包app 比如一个简单的gui,hello.p ...

  9. python代码封装_如何封装python代码

    封装是面向对象编程语言对客观世界的模拟,在客观世界里,对象的状态信息都被隐藏在对象内部,外界无法直接操作和修改.对一个类 或对象实现良好的封装. 下面通过例子来理解封装 封装数据:主要原因是:保护私隐 ...

  10. python能封装成exe文件_python文件封装成*.exe文件(单文件和多文件)

    环境:win10 64位  python3.7 单*.py文件打包 Python GUI:程序打包为exe 一.安装Pyinstaller,命令pip install Pyinstaller,(大写的 ...

最新文章

  1. android 动态 修改图标,android-动态更改ActionBar中的图标
  2. git--版本创建、回滚的原理及演练
  3. 面试官:为什么HTTPS是安全的
  4. MyBatisPlus中常用条件构造器示例代码
  5. ef1a启动子_常见的真核和原核表达系统的启动子(promoters)
  6. Linux字符设备与块设备的区别与比较
  7. 安卓SQLiteOpenHelper使用说明
  8. linux打开u盘里的文件,Linux下U盘内容为只读文件不能存储其他内容的解决办法
  9. 面试必备:synchronized的底层原理?
  10. * IO流递归拷贝一个文件夹 按源文件夹格式拷贝
  11. 设置窗口置顶_这三个应用,每一个都能让你置顶。
  12. python英文词频统计代码_python实现中文和英文的词频统计功能方法汇总
  13. C++虚继承的实现原理、内存分布、作用
  14. 搜索 —— 启发式搜索 —— 模拟退火
  15. oracle19c配置scott创建,oracle 19c创建sample schema-HR,OE,SH等等
  16. 牵手大众、现代,滴滴绯闻“女友”Aurora无人车启动商业化
  17. php 完全前后端分离使用jwt,larke-admin 是一套使用 Laravel 8 、JWT 和 RBAC鉴权的前后端分离的通用后台管理系统...
  18. java抓取豆瓣网页内容_爬取豆瓣网页上的电影(包括图片,评分,和简介等)
  19. Mac 打开大小写切换很慢
  20. 卡尔曼滤波(Kalman Filtering)——(7)扩展卡尔曼滤波(EKF)一阶滤波

热门文章

  1. 网络高手必备十款经典软件
  2. 短信后台构架开发说明—移讯云短信系统
  3. 利用Docker极速下载OpenJDK11源码
  4. Windows 7 系统虚拟机安装
  5. CF223B Two Strings
  6. Kettle调用纷享销客CRM部门及用户接口
  7. Jquery查找元素的方法汇总
  8. python实现自动抢票_python+selenium实现自动抢票
  9. 谈谈Java中的反射机制
  10. 【原创】批量修改AD账号的UPN后缀(同适用于解决外网自动配置Exchange邮箱)