• 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

  • 相关阅读:
    Error no matching function for call to 'std::exception::exception(const char [15])'
    Difference between 'SAME' and 'VALID' padding
    使用 RamMap 清理内存 How to Use RamMap to Empty System Working Set
    Ubuntu中网络配置interfaces与界面网络配置NetworkManager
    ifup / ifdown eth0 / eno1 reports unknown interface when it exists!
    Tab Key not working when using Xfce remote desktop
    Batch Norm、Layer Norm、Weight Norm与SELU
    IIS 域名 带参数 设置重定向
    C# 切换到二级域名,使用Cookie
    web服务器 双网卡 路由 设置
  • 原文地址:https://www.cnblogs.com/Kaylee/p/16102973.html
Copyright © 2020-2023  润新知