上海12班高松林 发表于 2021-4-15 20:22:42

python封装接口测试

import requests
组件接口请求的必要元素:url,data,headerr(请求头)method(请求方法)
组建接口请求的三种方式:
1.post方法
response = requests.post()
组建post请求
cms_login_url = 'http://192.168.29.128:8080/cms/manage/loginJump.do'
#注意接口请求中data信息和headers都是以字典格式存在
cms_login_data = {
    'userAccount' : 'admin',
    'loginPwd' : 123456
}
cms_login_headers = {'Content-Type': 'application/x-www-form-urlencoded'}
response = requests.post(url=cms_login_url,data=cms_login_data,headers=cms_login_headers)
print(response.text)
print(response.json())
print(response.url)
print(response.headers)
print(response.cookies)
print(response.status_code)

组建get请求
cms_login_params = {
    'userAccount': 'admin',
    'loginPwd': 123456
}
cms_login_headers = {'Content-Type': 'application/x-www-form-urlencoded'}
response = requests.get(url=cms_login_url,params=cms_login_data,headers=cms_login_headers)
print(response.text)
print(response.json())
print(response.url)
print(response.headers)
print(response.cookies)
print(response.status_code)


2.request方法
response = requests.request()

组建post方法
注意接口请求中data信息和headers都是以字典格式存在的
response = requests.request(method='post',url=cms_login_url,data=cms_login_data,headers=cms_login_headers)
print(response.json())

组建get请求
response = requests.request(method='get',url=cms_login_url,params=cms_login_data,headers=cms_login_headers)
print(response.json())


3.session方法====》》可以用来保持会话状态
session = requests.Session

response = session.post(url=cms_login_url,data=cms_login_data,headers=cms_login_headers)
print(response.json())
组建get请求
response1 = session.post(url=cms_login_url,params=cms_login_data,headers=cms_login_headers)
print(response1.json())

把组建的接口封装在类中


class Cms_Api:
    def __init__(self):
      self.session = requests.Session()#创建一个session
定义一个登录接口的方法
    def login(self):
      self.cms_login_url = 'http://192.168.29.128:8080/cms/manage/loginJump.do'
      self.cms_login_data = {
            'userAccount' : 'admin',
            'loginPwd' : 123456
      }
      self.cms_login_headers = {'Content-Type': 'application/x-www-form-urlencoded'}
      self.response = self.session.post(url=self.cms_login_url,data=self.cms_login_data,
                                          headers=self.cms_login_headers)
      print(self.response.json())
定义一个查询用户接口
    def querUserLIst(self):
      self.cms_queryUserList_url = 'http://192.168.29.128:8080/cms/manage/queryUserList.do'
      self.cms_queryUserList_data = {
                'startCreateDate':'',
                'endCreateDate':'',
                'searchValue':'',
                'page': 1
      }
      self.cms_queryUserList_headers ={'Content-Type': 'application/x-www-form-urlencoded'}
      self.response1 = self.session.post(url=self.cms_queryUserList_url, data=self.cms_queryUserList_data,
                                          headers=self.cms_queryUserList_headers)
      print(self.response1.text)
if __name__ == '__main__':
    c = Cms_Api()
    c.login()
    c.querUserLIst()

定义关联接口
import re,random
class Get_City:
    def __init__(self):
      pass
    def get_province(self):
      self.province_url = 'http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportProvince'
      self.province_data ={
      }
      self.province_headers = {'Content-Type': 'application/x-www-form-urlencoded'}
      self.response = requests.post(url=self.province_url,data=self.province_data, headers=self.province_headers)
      # print(self.response.text)
      p_re = re.compile('<string>(.+?)</string>')
      all = p_re.findall(self.response.text)
      # print(all
      for i in all:
            value = random.choice(all)
      return value
    def get_city(self,str1):

      self.city_url='http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCity'
      self.city_data = {
            'byProvinceName':str1
      }
      self.city_headers = {'Content-Type': 'application/x-www-form-urlencoded'}
      self.response = requests.post(url=self.city_url,data=self.city_data,headers=self.city_headers)
      print(self.response.text)
if __name__ == '__main__':
    g = Get_City()
    v = g.get_province()
    g.get_city(v)

把接口请求封装在unittest框架中
import requests
import unittest
class Cms_Api(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
      cls.session = requests.Session

    def test_01_login(self):
      self.cms_login_url='http://192.168.29.128:8080/cms/manage/loginJump.do'
      self.cms_login_data ={
            'userAccount': 'admin',
            'loginPwd' : 123456
      }
      self.cms_login_headers ={'Content-Type': 'application/x-www-form-urlencoded'}
      self.response = self.session.post(url=self.cms_login_url,data=self.cms_login_data,headers=self.cms_login_headers)
      print(self.response.json())

    def test_02_queryUserList(self):
      self.cms_queryUserList_url='http://192.168.29.128:8080/cms/manage/queryUserList.do'
      self.cms_queryUserList_data= {
                'startCreateDate':'',
                'endCreateDate':'',
                'searchValue':'',
                'page': 1
      }
      self.cms_queryUserList_headers={'Content-Type': 'application/x-www-form-urlencoded'}
      self.response = self.session.post(url=self.cms_queryUserList_url, data=self.cms_queryUserList_data,
                                          headers=self.cms_queryUserList_headers)
      print(self.response.text)

    def test_03_saveSysUser(self):
      self.cms_saveSysUser_url='http://192.168.29.128:8080/cms/manage/saveSysUser.do'
      self.cms_saveSysUser_data ={
            'id':'',
            'userName':'admin2',
            'userSex': 1,
            'userMobile': 15978826657,
            'userEmail':' 101 % 40QQ.com',
            'userAccount': 'admin2',
            'loginPwd': '123456',
            'confirmPwd': '123456'
      }
      self.cms_saveSysUser_headers ={'Content-Type': 'application/x-www-form-urlencoded'}
      self.response = self.session.post(url=self.cms_saveSysUser_url, data=self.cms_saveSysUser_data,
                                          headers=self.cms_saveSysUser_headers)
      print(self.response.text)

    def test_04_updateLoginPwd(self):
      self.cms_updateLoginPwd_url='http://192.168.29.128:8080/cms/manage/updateLoginPwd.do'
      self.cms_updateLoginPwd_data ={
            'id': 3,
            'loginPwd': '1234567',
            'loginPwd2': '1234567'
      }
      self.cms_updateLoginPwd_headers ={'Content-Type': 'application/x-www-form-urlencoded'}
      self.response = self.session.post(url=self.cms_updateLoginPwd_url, data=self.cms_updateLoginPwd_data,
                                          headers=self.cms_updateLoginPwd_headers)
      print(self.response.text)

    def test_05_saveModuleCategory(self):
      self.cms_saveModuleCategory_url='http://192.168.29.128:8080/cms/manage/saveModuleCategory.do'
      self.cms_saveModuleCategory_data ={
            'id':'',
            'categoryName':'asd',
            'parentId':'',
            'parentId':'',
            'categoryCode': 'asd',
            'categoryDesc':'',
            'keyTitle':'',
            'keyWords':'',
            'keyDesc':''
      }
      self.cms_saveModuleCategory_headers ={'Content-Type': 'application/x-www-form-urlencoded'}
      self.response = self.session.post(url=self.cms_saveModuleCategory_url, data=self.cms_saveModuleCategory_data,
                                          headers=self.cms_saveModuleCategory_headers)
      print(self.response.text)

    def test_06_saveArticle(self):
      self.cms_saveArticle_url='http://192.168.29.128:8080/cms/manage/saveArticle.do'
      self.cms_saveArticle_data ={
            'id':'',
            'articleExt.id':'',
            'categoryId': 1,
            'articleTitle': '123',
            'articleDesc': '123',
            'articleIsShow':'0',
            'articleExt.articleContent': '< p > 123 < / p >',
            'articleAuthor': '123',
            'articleSource':'123',
            'editorValue': '< p > 123 < / p >'
      }
      self.cms_saveArticle_headers ={'Content-Type': 'application/x-www-form-urlencoded'}
      self.response = self.session.post(url=self.cms_saveArticle_url, data=self.cms_saveArticle_data,
                                          headers=self.cms_saveArticle_headers)
      print(self.response.text)
if __name__ == '__main__':
    unittest.main(verbosity=2)




















上海12班高松林 发表于 2021-4-15 20:24:12


1、抓包工具fiddler打断点:
请求前断点:Before Requests
请求后断点:After Requests
在命令行输入bpu+接口地址,然后点击enter键,可以添加单个接口的前置断点。
出现提示行内容,看到红色T的标识,则表示接口前置断点设置成功
找到需要修改的请求后,选中该条会话,右侧打开WebFroms,可以进行参数的修改
修改之后点击Run to Completion.

2、导出postman工具的集合方法,点击。。。,点击export,导出的文件是JSON的文件

3、如何用POSTMAN做接口自动化测试?
1.导出在postman 工具内调试好的接口集合
2.利用jenkins+ant持续集成,来完成接口的自动化构建。

4、cookie、session的加入
HTTP请求是无状态的,所以解决共享信息的问题必须采用其他的手段,于是就有了sessionid,sessionid是基于cookie实现的。
服务器为每一个用户生成一个不一样的随机字符串,每次向服务器发起HTTP请求时,都会把这个字符串传给服务器,这样就能区分用户了。

5、session的缺点
对于客户端来说session是非常好的,只需要cookie中存一个字符串就好了,但对于服务器来说,必须存储所有在线用户的session,
那么这就占用了很大的资源(cpu,内存),严重影响服务器的性能。这时可以选择去扩展服务器做集群,但是同时也出现了分布式sessi
on的问题,那么可以采用session粘滞或者session集中式管理(redis)来解决。

6、cookie、session的区别
cookie:客户端和服务端都能生成cookie,存放在客户端。存放一些不敏感的数据,数据类型只能是字符串(json).
session:服务端生成session,存放在服务端。可以存放任意数据,Java中session中可以存放任意对象,session必须依赖cookie实现。

7、token 票据的意思,就是门票、令牌
token也是一个字符串,用户输入用户名和密码之后,向服务器发起请求,服务器会生成一个token串,token串是由header+userid+时间戳,在
经过一个加密的算法,生成一个token字符串。

8、session和token的区别:
session:服务器生成、存储、验证,以cookie的方式传给客户端,客户端以
同样的方式发送给服务端。session有状态。
token:服务器生成、验证,以cookie或者请求头的形式传给客户端,客户端以
同样的方式发送给服务器,token无状态。
页: [1]
查看完整版本: python封装接口测试