python接口自动化(三十五)-封装与调用--流程类接口关联(详解)

简介: 流程相关的接口,主要用 session 关联,如果写成函数(如上篇),s 参数每个函数都要带,每个函数多个参数,这时候封装成类会更方便。在这里我们还是以博客园为例,带着小伙伴们实践一下。

简介


  

流程相关的接口,主要用 session 关联,如果写成函数(如上篇),s 参数每个函数都要带,每个函数多个参数,这时候封装成类会更方便。在这里我们还是以博客园为例,带着小伙伴们实践一下。


接口封装大致流程



1、在接口测试中,有些接口经常会被用到比如登录的接口,这时候我们可以每个接口都封装成一个方法,如:登录、保存草稿、发布随笔、删除随笔,这四个接口就可以写成四个方法


2、接口封装好了后,后面我们写用例那就直接调用封装好的接口就行了,有些参数,可以参数化,如保存草稿的 title 和 body 两个参数是动态的。调用时直接将其传入方法中,就可以了


3、像这种流程类的接口,后面的会依赖前面的,我们就可以通过 session将其关联起来


4、将自动化测试脚本保存到 login.py文件中,这样就可以是脚本和业务分离


实战实例



第一步:在pycharm中左上角点击“file”,然后点击“New Project”,修改名字为“jiekou”,点击“Create”


1232840-20190514103928018-1244794824.png


第二步:在jiekou文件夹下,分别创建python package分别命名为“blog”和“case”


1232840-20190514104326199-981270842.png


第三步:都完成后,如下

1232840-20190514104722073-1586666121.png


第四步:在login.py文件中编辑自动化测试脚本

1232840-20190514113432412-753092381.png


用例导入接口



1、导入上面 login.py 模块写的接口自动化测试脚本


1232840-20190514114940669-1040742021.png


2、在test_01.py中编辑测试用例


1232840-20190514113853908-1880419913.png


参考代码



login.py文件


# coding=utf-8
  # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
  # 2.注释:包括记录创建时间,创建人,项目名称。
  '''
  Created on 2019-5-15
  @author: 北京-宏哥
  Project:学习和使用封装与调用--流程类接口关联
  '''
# 3.导入模块
 import requests
 # 禁用安全请求警告
 import urllib3
 urllib3.disable_warnings()
 import warnings
 warnings.simplefilter("ignore", ResourceWarning)
 class Blog():
     def __init__(self, s):
         s = requests.session()  # 全局参数
         self.s = s
     def login(self):
         '''登录接口'''
         url = "http://localhost:8080/jenkins/j_acegi_security_check"
         headers = {
             "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"
         }  # get方法其它加个ser-Agent就可以了
         d = {"j_username": "admin",
              "j_password": "111111",
              "from": "",
              "Submit": u"登录",
              "remember_me": "on"
              }
         s = requests.session()
        r = s.post(url, headers=headers, data=d)
         # print (r.content.decode('utf-8'))
         # 正则表达式提取账号和登录按钮
         import re
         t = re.findall(r'<b>(.+?)</b>', r.content.decode('utf-8'))  # 用python3的这里r.content需要解码
         print(t[0])
         print(t[1])
     def get_postid(self, r2_url):
         '''正则表达式提取'''
         import re
         postid = re.findall(r"postid=(.+?)&", r2_url)
         print(postid)  # 这里是 list []
         # 提取为字符串
         print(postid[0])
         return postid[0]
     def save(self, title, body):
         '''保存草稿箱:
         参数 1:title # 标题
         参数 2:body # 中文'''
        url2 = "https://i.cnblogs.com/EditPosts.aspx?opt=1"
         d = {"__VIEWSTATE": "",
              "__VIEWSTATEGENERATOR": "FE27D343",
              "Editor$Edit$txbTitle": title,
              "Editor$Edit$EditorBody": "<p>%s</p>" % body,
              "Editor$Edit$Advanced$ckbPublished": "on",
              "Editor$Edit$Advanced$chkDisplayHomePage": "on",
             "Editor$Edit$Advanced$chkComments": "on",
             "Editor$Edit$Advanced$chkMainSyndication": "on",
              "Editor$Edit$lkbDraft": "存为草稿",
              }
         r2 = self.s.post(url2, data=d, verify=False)  # 保存草稿箱
         print(r2.url)
         return r2.url
     def del_tie(self, postid):
         '''删除帖子'''
         del_json = {"postId": postid}
         del_url = "https://i.cnblogs.com/post/delete"
         r3 = self.s.post(del_url, json=del_json, verify=False)
         print(r3.json()["isSuccess"])
         return r3.json()
 if __name__ == "__main__":
     s = requests.session()
     Blog(s).login()


test_01.py


 # coding=utf-8
  # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
 # 2.注释:包括记录创建时间,创建人,项目名称。
 '''
  Created on 2019-5-15
  @author: 北京-宏哥
  Project:学习和使用封装与调用--流程类接口关联
  '''
 # 3.导入模块
 import unittest
 import requests
 import warnings
 from blog.login import Blog
 class Test(unittest.TestCase):
     def setUp(self):
        warnings.simplefilter("ignore", ResourceWarning)
         s = requests.session()
         self.blog = Blog(s)
      def test_login_01(self):
        self.blog.login()
        print (result)
        print (type(result))
        print (result["success"] )# 登录,获取结果
        self.assertEqual(result["success"] , True) # 拿结果断言
     def test_del_02(self):
         # 第一步:登录
         self.blog.login()
         # 第二步:保存
         r2_url = self.blog.save(title="北京-宏哥,流程类接口关联", body="学习和使用封装与调用--流程类接口关联")
         pid = self.blog.get_postid(r2_url)
         # 第三步:删除
         result = self.blog.del_tie(pid)
         print(result)
         self.assertEqual(result["isSuccess"], True)
 if __name__ == "__main__":
     unittest.main()


小结


  

流程相关的接口的封装和调用给各位小伙伴暂且介绍到这里,因为博客园的登陆机制改变,小伙伴们可以用jenkins的仿照这一篇实战演练一下,下一篇我会带你们一起做一下。


欲知后事发展,请听下回分解!!

相关文章
|
1月前
|
API Python
【02】优雅草央央逆向技术篇之逆向接口协议篇-以小红书为例-python逆向小红书将用户名转换获得为uid-优雅草央千澈
【02】优雅草央央逆向技术篇之逆向接口协议篇-以小红书为例-python逆向小红书将用户名转换获得为uid-优雅草央千澈
95 1
|
28天前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
106 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
10天前
|
API 文件存储 数据安全/隐私保护
python 群晖nas接口(一)
这段代码展示了如何通过群晖NAS的API获取认证信息(SID)并列出指定文件夹下的所有文件。首先,`get_sid()`函数通过用户名和密码登录NAS,获取会话ID(SID)。接着,`list_file(filePath, sid)`函数使用该SID访问FileStation API,列出给定路径`filePath`下的所有文件。注意需替换`yourip`、`username`和`password`为实际值。
51 18
|
8天前
|
API Python
python泛微e9接口开发
通过POST请求向指定IP的API注册设备以获取`secrit`和`spk`。请求需包含`appid`、`loginid`、`pwd`等头信息。响应中包含状态码、消息及`secrit`(注意拼写)、`secret`和`spk`字段。示例代码使用`curl`命令发送请求,成功后返回相关信息。
30 5
|
8天前
|
API 文件存储 Python
python 群晖nas接口(二)
这段代码展示了如何通过API将文件上传到群晖NAS。它使用`requests`库发送POST请求,指定文件路径、创建父级目录及覆盖同名文件的参数,并打印上传结果。确保替换`yourip`和`sid`为实际值。
27 2
|
2月前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
116 2
|
2月前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
6月前
|
测试技术 索引 Python
Python接口自动化测试框架(练习篇)-- 数据类型及控制流程(一)
本文提供了Python接口自动化测试中的编程练习,包括计算器、猜数字、猜拳和九九乘法表等经典问题,涵盖了数据类型、运算、循环、条件控制等基础知识的综合应用。
67 1
|
3月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
190 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
6月前
|
IDE 测试技术 开发工具
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作
本文介绍了Python中的文件操作方法,包括使用open()打开文件、close()关闭文件、read()读取内容、readline()读取单行、readlines()读取多行、write()写入内容以及writelines()写入多行的方法。同时,探讨了文件操作模式和编码问题,并扩展了上下文管理器with...as的使用,以及对图片和音频文件操作的思考和练习。
51 1
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作

推荐镜像

更多