简介

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

接口封装大致流程

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

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

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

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

实战实例

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

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

第三步:都完成后,如下

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

用例导入接口

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

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

参考代码

login.py文件

  1. # coding=utf-
  2. # .先设置编码,utf-8可支持中英文,如上,一般放在第一行
  3.  
  4. # .注释:包括记录创建时间,创建人,项目名称。
  5. '''
  6. Created on --
  7. @author: 北京-宏哥
  8. Project:学习和使用封装与调用--流程类接口关联
  9. '''
  10. # .导入模块
  11. import requests
  12. # 禁用安全请求警告
  13. import urllib3
  14.  
  15. urllib3.disable_warnings()
  16. import warnings
  17.  
  18. warnings.simplefilter("ignore", ResourceWarning)
  19.  
  20. class Blog():
  21. def __init__(self, s):
  22. s = requests.session() # 全局参数
  23. self.s = s
  24.  
  25. def login(self):
  26. '''登录接口'''
  27. url = "http://localhost:8080/jenkins/j_acegi_security_check"
  28. headers = {
  29. "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"
  30. } # get方法其它加个ser-Agent就可以了
  31. d = {"j_username": "admin",
  32. "j_password": "",
  33. "from": "",
  34. "Submit": u"登录",
  35. "remember_me": "on"
  36. }
  37.  
  38. s = requests.session()
  39. r = s.post(url, headers=headers, data=d)
  40. # print (r.content.decode('utf-8'))
  41. # 正则表达式提取账号和登录按钮
  42. import re
  43. t = re.findall(r'<b>(.+?)</b>', r.content.decode('utf-8')) # 用python3的这里r.content需要解码
  44. print(t[])
  45. print(t[])
  46.  
  47. def get_postid(self, r2_url):
  48. '''正则表达式提取'''
  49. import re
  50. postid = re.findall(r"postid=(.+?)&", r2_url)
  51. print(postid) # 这里是 list []
  52. # 提取为字符串
  53. print(postid[])
  54. return postid[]
  55.  
  56. def save(self, title, body):
  57. '''保存草稿箱:
  58. 参数 :title # 标题
  59. 参数 :body # 中文'''
  60. url2 = "https://i.cnblogs.com/EditPosts.aspx?opt=1"
  61. d = {"__VIEWSTATE": "",
  62. "__VIEWSTATEGENERATOR": "FE27D343",
  63. "Editor$Edit$txbTitle": title,
  64. "Editor$Edit$EditorBody": "<p>%s</p>" % body,
  65. "Editor$Edit$Advanced$ckbPublished": "on",
  66. "Editor$Edit$Advanced$chkDisplayHomePage": "on",
  67. "Editor$Edit$Advanced$chkComments": "on",
  68. "Editor$Edit$Advanced$chkMainSyndication": "on",
  69. "Editor$Edit$lkbDraft": "存为草稿",
  70. }
  71. r2 = self.s.post(url2, data=d, verify=False) # 保存草稿箱
  72. print(r2.url)
  73. return r2.url
  74.  
  75. def del_tie(self, postid):
  76. '''删除帖子'''
  77. del_json = {"postId": postid}
  78. del_url = "https://i.cnblogs.com/post/delete"
  79. r3 = self.s.post(del_url, json=del_json, verify=False)
  80. print(r3.json()["isSuccess"])
  81. return r3.json()
  82.  
  83. if __name__ == "__main__":
  84. s = requests.session()
  85. Blog(s).login()

test_01.py

  1. # coding=utf-
  2. # .先设置编码,utf-8可支持中英文,如上,一般放在第一行
  3.  
  4. # .注释:包括记录创建时间,创建人,项目名称。
  5. '''
  6. Created on --
  7. @author: 北京-宏哥
  8. Project:学习和使用封装与调用--流程类接口关联
  9. '''
  10. # .导入模块
  11. import unittest
  12. import requests
  13. import warnings
  14. from blog.login import Blog
  15.  
  16. class Test(unittest.TestCase):
  17. def setUp(self):
  18. warnings.simplefilter("ignore", ResourceWarning)
  19. s = requests.session()
  20. self.blog = Blog(s)
  21.  
  22. def test_login_01(self):
  23.    self.blog.login()
  24.    print (result)
  25.    print (type(result))
  26.   print (result["success"] )# 登录,获取结果
  27.    self.assertEqual(result["success"] , True) # 拿结果断言
  28. def test_del_02(self):
  29. # 第一步:登录
  30. self.blog.login()
  31. # 第二步:保存
  32. r2_url = self.blog.save(title="北京-宏哥,流程类接口关联", body="学习和使用封装与调用--流程类接口关联")
  33. pid = self.blog.get_postid(r2_url)
  34. # 第三步:删除
  35. result = self.blog.del_tie(pid)
  36. print(result)
  37. self.assertEqual(result["isSuccess"], True)
  38.  
  39. if __name__ == "__main__":
  40. unittest.main()

小结

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

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

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

  1. python接口自动化(三十六)-封装与调用--流程类接口关联续集(详解)

    简介 上一篇已经给大家都介绍过了流程类接口关联,但是由于博客的登录机制改变,所以没有办法给小伙伴们实战演练一下,那么这篇就按照上一篇计划的用jenkins来给小伙伴们演示一下流程类接口的封装和调用,其 ...

  2. python接口自动化(三十七)-封装与调用--读取excel 数据(详解)

    简介 在进行软件接口测试或设计自动化测试框架时,一个不比可避免的过程就是: 参数化,在利用python进行自动化测试开发时,通常会使用excel来做数据管理,利用xlrd.xlwt开源包来读写exce ...

  3. python接口自动化(十二)--https请求(SSL)(详解)

    简介 本来最新的requests库V2.13.0是支持https请求的,但是一般写脚本时候,我们会用抓包工具fiddler,这时候会 报:requests.exceptions.SSLError: [ ...

  4. 第三十五节,目标检测之YOLO算法详解

    Redmon, J., Divvala, S., Girshick, R., Farhadi, A.: You only look once: Unified, real-time object de ...

  5. python接口自动化(三十四)-封装与调用--函数和参数化(详解)

    简介 前面虽然实现了参数的关联,但是那种只是记流水账的完成功能,不便于维护,也没什么可读性,随着水平和技能的提升,再返回头去看前边写的代码,简直是惨不忍睹那样的代码是初级入门的代码水平都达不到.接下来 ...

  6. Jmeter(三十五) - 从入门到精通进阶篇 - 关联(详解教程)

    1.简介 上一篇中介绍了如果想要同时发送多条请求,那么怎样才能让每条数据某些请求参数改变呢.这就用到了jMeter参数化.在实际测试场景中,我们往往还有这样的需求,登录后服务器响应的token作为下次 ...

  7. Spring Boot 入门系列(二十五)读取配置文件的几种方式详解!

    在项目开发中经常会用到配置文件,之前介绍过Spring Boot 资源文件属性配置的方法,但是很多朋友反馈说介绍的不够详细全面.所以, 今天完整的分享Spring Boot读取配置文件的几种方式! S ...

  8. 【Android Studio安装部署系列】三十二、Android模拟器Genymotion安装使用教程详解

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 一.注册\登录 打开Genymotion官网,https://www.genymotion.com/ ,首先点击右上角的Sign in进行 ...

  9. 第十五节,卷积神经网络之AlexNet网络详解(五)

    原文 ImageNet Classification with Deep ConvolutionalNeural Networks 下载地址:http://papers.nips.cc/paper/4 ...

随机推荐

  1. 大话设计模式--适配器模式 Adapter -- C++实现实例

    1.适配器模式: 将一个类的接口转换为客户希望的另一个接口,使得原来由于接口不能一起工作的那些类一起工作. 适配器模式一般用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况. 适配器模式分 ...

  2. 使用POI将doc文件转换为html

    需要的jar包有:有一些是依赖包,可以使用maven下载 doc文件转换为html文件 package com.gsww.sxzz.controller.service; import org.apa ...

  3. 四 Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

    Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...

  4. L99

    You're not obligated to win. You're obligated to keep trying.你不一定要获胜,但你必须不断尝试.He announced an expans ...

  5. BEC listen and translation exercise 39

    What about jigsaw puzzle design for visually handicapped?给视觉障碍人士设计拼图怎么样? Length is 50cm, and then th ...

  6. Mybatis学习--Sql语句构建器

    学习笔记,选自Mybatis官方中文文档:http://www.mybatis.org/mybatis-3/zh/statement-builders.html 问题 Java程序员面对的最痛苦的事情 ...

  7. 【跨域】Access-Control-Allow-Origin

  8. vue-router路由嵌套的使用

    vue-router路由嵌套的使用,以及子路由中设置默认路由: 项目结构: 在/src/App.vue文件中: <template> <div id="app"& ...

  9. android开发 MyEclipse下测试连接MySQL数据库

    1.首先要加载MySQL驱动包. 步骤:右击项目找到build path->configure build path->libraries——>add External JARs添加 ...

  10. Java精度计算与舍入

    用到的类: 类 BigDecimal:不可变的.任意精度的有符号十进制数.BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成.如果为零或正数,则标度是小数点后 ...