Python——requests接口测试及Jenkins环境搭建

一、requests请求

1、post请求

data:

文件格式为表单

如果是JSON数据格式,需要对请求参数进行序列化的处理

json:

请求数据格式为JSON的数据格式

import  requests

"r"——response。post——请求方式
r=requests.post(
# 请求地址
    url="http://47.95.142.233:8000/login/auth/",
# 请求参数,可以在Payload中查看
    json={"username":"18292091170","password":"123456"},
    headers={"Content-Type":"application/json;charset=UTF-8"}
)

#Json中获取状态码、数据类型和响应头
print(r.status_code) # 状态码
print(r.json()) # 返回的是json的数据类型,字典类型
print(r.headers) # 响应头

print(r.text)——获取的是文件信息

print(r.content)——返回的二进制内容(bytes)

 

 序列化处理

 容易出错的问题:请求头信息,data内容,符号位置(放置错误,漏写或多写)

data=json.dumps({"username": "182****1170", "password": "123456"})

输出信息中添加内容

print(json.dumps(r.json(),indent=True,ensure_ascii=False))

 

2、动态参数

2.1、登录成功后,返回token

2.2、在下一个请求中,把返回的token带上

import requests
import  json

def login():
   r=requests.post(
         url="http://47.95.142.233:8000/login/auth/",
         data=json.dumps({"username": "182****1170", "password": "123456"}),
         headers={"Content-Type":"application/json;charset=UTF-8"})
         
   return r.json()["token"]

def index():
   r=requests.get(
      url="http://47.95.142.233:8000/interface/index",
      headers={"Authorization":"JWT {token}".format(token=login())}) 
      
   print(r.status_code)
   print(r.json())

index()

 

3、get请求方法

import requests
import  json

def login():
    r=requests.post(
            url="http://47.95.142.233:8000/login/auth/",
            data=json.dumps({"username": "182****1170", "password": "123456"}),
            headers={"Content-Type":"application/json;charset=UTF-8"})
    return r.json()["token"]

# 产品搜索,可以随意命名    
def soProduct():
   r = requests.get(
      url="http://47.95.142.233:8000/interface/products",
      params={"name":"asder"},
      headers={"Authorization":"JWT {token}".format(token=login())})
      
   print(r.status_code)
   print(r.url)
   print(r.json())

soProduct()

 

4、PUT请求方法

import requests
import  json

def addProduct():
   r=requests.post(
      url="http://47.95.142.233:8000/interface/product/",
      json={"name":"wp","product_type":"WEB","version":"12.2","master":"wp","description":"12345"},
      headers={"Content-Type":"application/json","Authorization":"JWT {token}".format(token=login())})
   return r.json()["id"]

def updateProduct():
   r=requests.put(
      url="http://47.95.142.233:8000/interface/product/{productID}/".format(productID=addProduct()),
      headers={"Content-Type":"application/json","Authorization":"JWT {token}".format(token=login())},
      json={"name":"wp2.1","product_type":"WEB","version":"12.2","master":"wp","description":"12345","id":addProduct()})
   print(r.json())

 

5、DEL删除成功

def delProduct():
   r=requests.delete(
      url="http://47.95.142.233:8000/interface/product/{productID}/".format(productID=addProduct()),
      headers={"Authorization":"JWT {token}".format(token=login())})

   print(r.status_code)

delProduct()

 

二、sessionid在互联网中的使用

 

注意:做接口测试中,charles与电脑本地中的代理都是需要关闭,charles中点击Proxy的stop关闭

 

 " "中的信息隐藏了,可以在互联网中请求时添加

import requests

def loginCto():
   r=requests.post(
      url="",
      headers={
         "Content-Type":" ",
         "User-Agent":" ",
         "Referer":" ",
         "Cookie":" "},
   data={
      "_csrf":" ",
      "LoginForm[username]":" ",
      "LoginForm[password]":" ",
      "show_qr":"0"})

# 返回sessionID的信息
   return r.cookies

def profile():
   r=requests.get(
      url=" ",
      cookies=loginCto())
   print(r.text)

profile()

 

1、session会话对象

1.1、所有的请求之间cookies能够共享

1.2、底层TCP连接只需要建立一次,那么就节约了请求的时间

 

import requests

def loginCto():
   s=requests.Session()
   r=requests.post(
      url=" ",
      headers={
         "Content-Type":" ",
         "User-Agent":" ",
         "Referer":" ",
         "Cookie":" "},
data={
      "_csrf":" ",
      "LoginForm[username]":" ",
      "LoginForm[password]":" ",
      "show_qr":"0"})

# 返回session会话对象
   return s

def profile():
   r=loginCto().get(
      url="https://www.51cto.com/")
   print(r.text)

profile()

 

2、超时如何处理?

返回的信息提示为:connectTimeout

可以在请求中增加timeout的关键字,把响应时间增加一些,以避免这个错误

import requests
r=requests.get(
   url="https://www.baidu.com",
   timeout=60 #以秒为单位
)
print(r.text)

 

三、持续集成(简称CI)——Jenkins持续集成工具

   1、目的是:让产品快速交付,并且保持高质量的业务交付

   2、互联网产品的特点是:小步快跑,快速迭代

   3、研发的标准化核心流程是:

将代码集成到主干分支后,必须要经过自动化的测试,如果自动化测试执行失败,就不能集成到主干分支上

   4、持续集成指的是频繁的往主干分支提交代码,具备两大优点:

第一个:快速发现问题,将代码集成到主干分枝后,如果自动化执行失败,就能够快速的发现问题,并且定位问题

第二个:防止分支与主干分支偏离过大。后期集成成本比较高,或者难以集成

 

四、环境搭建步骤

Jenkins持续集成工具持续集成中优秀的工具,是完全100%Java语言的,部署的方式是:

1、解压在当前文件夹中,把jenkins.war放在Tomcat的WebApps目录下

2、启动tomcatWEB容器,点击bin,选择startup.bat双击运行

开启运行:startup.bat、MAC为.sh

停止:shutup.bat

3、在浏览器中访问地址:http://localhost:8080/jenkins/,在控制台内按回车键让其继续运行

tomcat默认端口是8080

 

4、进入后密码地址可以在提示中的路径中查看,或者在控制台中查找

5、跳过插件安装,创建管理员信息填写,账户为wangpan,密码123456

 

 

6、进入实例配置后,直接点击保存并完成,然后就可以开始使用Jenkins了

 

 

7、进入主页后,选择Manage Jenkins,如图操作

 

 8、进入Manage Jenkins,如果显示离线,可以把Update site的URL修改为http://updates.jenkins.io/update-center.json,然后再重启一下tomcat,多次尝试一下。在线后,下载JMeter下出现的Performance、git、ant、python、allure插件

 

五、在控制台中生成测试报告

1、jmeter、UI、API都会整合到jenkins持续集成

特性:
执行完成后可以查看报告
报警(与钉钉结合)

 

2、jenkins整合钉钉

参考链接:https://www.cnblogs.com/hong-fithing/p/13755720.html

2.1、点击钉钉群中的设置-智能群助手-添加机器人-自定义-添加
设置机器人名称及安全设置,复制出现的链接,点击完成

 

 

2.1、打开jenkins,点击Manage Jenkins-Configure System

 

posted @ 2022-04-05 23:41  棠小梨  阅读(272)  评论(0编辑  收藏  举报