zoukankan      html  css  js  c++  java
  • Python接口自动化测试脚本-实现禅道登录

     未来应用方向:UI自动化测试或接口自动化测试发现的Bug可自动录入禅道,带截图与相关报错信息、

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    '''=================================================
    @Project -> File   :NingMengProject -> PostZentao.py
    @IDE    :PyCharm
    @Author :孤问万古愁
    @Date   :2020/3/14 13:13
    @Desc   :
    =================================================='''
    
    import requests
    import hashlib
    import re
    # 禅道登录流程:
    # 1、打开登陆页面的时候页面产生一个zentaosid的唯一标识,以及一个verifyRand随机值
    # 2、对输入的密码进行md5加密
    # 3、已经加密的密码+verifyRand再一次md5加密
    # 4、然后post请求登陆地址根据唯一的zentaosid验密
    
    class GetToken():
        """获取禅道的token值及登录后的cookies"""
    
        def __init__(self, username='admin', pwd='admin123456'):  # 用户名、密码设置默认值
            self.username = username
            self.pwd = pwd
    
        def get_token(self):
            loginUrl = "http://127.0.0.1:8088/zentao/user-login.html"
            headers_1 = {"Content-Type": "application/x-www-form-urlencoded"}    # 定义headers
    
            get_sid = requests.get(loginUrl)   # get方法请求登录页面,用于获取SID
            get_sid.encoding = 'utf-8'
            verifyRand = re.findall("id='verifyRand' value='(d+)'", get_sid.text)[0]  # 获取verifyRand值
            SID = get_sid.cookies["zentaosid"]
            # print(SID)
    
            hlFirst = hashlib.md5()
            hlFirst.update(self.pwd.encode(encoding='utf-8'))  # 第一次对密码进行加密
            # print('Md5 第一次加密结果 = ' + hlFirst.hexdigest())
            passwordResult = hlFirst.hexdigest() + verifyRand
            # print("passwordResult=" + passwordResult)
            hlLast = hashlib.md5()
            hlLast.update(passwordResult.encode(encoding='utf-8'))  # 第二次加密
            # print('Md5 第二次加密结果 = ' + hlLast.hexdigest())
    
            # 定义请求参数body
            bodyRequest = {"account": self.username, "password": hlLast.hexdigest(), "passwordStrength": 1,
                           "referer": "/zentao/", "verifyRand": verifyRand, "keepLogin": 1}
    
            # 定义cookies
            loginCookies = dict(zentaosid=SID, lang='zh-cn', keepLogin='on')
            loginRequest = requests.post(loginUrl, data=bodyRequest, cookies=loginCookies)
    
            token = loginRequest.cookies['zp']   # 从cookies中获取token
    
            # 测试一下:访问我的地盘页面
            test = requests.get("http://127.0.0.1:8088/zentao/my/",cookies=loginRequest.cookies)
            # print(test.text)
            # print(token)
            # # print(loginRequest.text)
    
            return token,loginRequest.cookies
    
    if __name__ == '__main__':
        # GetToken().get_token()
        # print(GetToken().get_token())
        url="http://127.0.0.1:8088/zentao/product-create.html"
        text_1=requests.get(url,cookies=GetToken().get_token()[1]).text
        # print(text_1)
        uid = re.findall("var kuid = '(.*?)';", text_1)[0]
        headers_1 = {"Content-Type": "application/x-www-form-urlencoded"}
        body_te="name=&code=&line=0&PO=admin&QD=&RD=&type=normal&status=normal&desc=&acl=open&uid=5e6f56b6cb28f"
        body_add_product={"name":"禅道接口自动化","code":"ZenTaoInterface","line":0,"PO":"admin","QD":"","RD":"","type":"normal","status":"normal","desc":"","acl":"open","uid":uid}
        result = requests.post(url,data=body_add_product,headers=headers_1,cookies=GetToken().get_token()[1])
        print(result.text)
    

      

  • 相关阅读:
    编程之美-2.18 数组分割
    话题模型
    暂时跳过的Leetcode题目
    LDA主题模型
    二叉树非递归的统一实现
    取余和取模运算
    IDM非补丁破解方法
    两种建立堆的方法HeapInsert & Heapify
    非阻塞connect:Web客户程序
    非阻塞connect
  • 原文地址:https://www.cnblogs.com/51benpao/p/12903280.html
Copyright © 2011-2022 走看看