您现在的位置是:首页 >学无止境 >025python-怎么处理一个用例需要用到前面一条用例返回结果里面的某些值的依赖关系网站首页学无止境

025python-怎么处理一个用例需要用到前面一条用例返回结果里面的某些值的依赖关系

倔强的小白菜 2024-06-17 11:26:46
简介025python-怎么处理一个用例需要用到前面一条用例返回结果里面的某些值的依赖关系

如果一个用例需要用到前面一条用例返回结果里面的某些值,怎么处理这种依赖关系?



第一种:放到setup里面,每次请求时在setup里面重新请求前面一条用例



1、创建一个http_request请求测试类

import requests


# 创建一个http请求测试类
class HttpRequest:
    """利用requests封装get请求和post请求"""

    def http_request(self, deng_url, deng_data, method, cookie=None):  
        """url、data、cookie 参数化:
        url:请求的地址 http://xxxx:port
        param(参数):传递的参数,非必填参数,字典格式传递参数
        method:请求方式,支持get以及post请求
        cookie:请求的时候传递的cookie值"""

        # 登录,进行method判断
        if method.lower() == 'get':
        # 响应结果的消息实体
            deng_res = requests.get(deng_url, json=deng_data, cookies=cookie)  
        else:
        # 响应结果的消息实体
            deng_res = requests.post(deng_url, json=deng_data, cookies=cookie)
  
        # 返回一个消息实体
        return deng_res  


if __name__ == '__main__':
    # 创建登录实例
    deng_url = 'https://XXXXX'
    deng_data = {"email": "1851033XXX", "password": "XXXXX", "remember": "0", "code": "", "mobile": "",
                 "type": "login", "reqtimestamp": 1683648560588}
    deng_res = HttpRequest().http_request(deng_url, deng_data, 'post')
    print('登录结果是:', deng_res.json())
    # print('登录cookie是:', deng_res.cookies)

    # 聚合数据登陆后 查询,调用cookies
    query_url = 'https://XXX'
    query_data = {"isstudy": "1", "search": " ", "semester": "", "term": "", "reqtimestamp": 1683649384807}
    # 创建查询实例
    query_res = HttpRequest().http_request(query_url, query_data, 'get', deng_res.cookies)  # 如果接口没有参数,传{}字典,如:(query_url, {}, 'get', deng_res.cookies)
    print('查询结果是:', query_res.json())
2、创建一个测试用例类
import unittest

# 导入http_rquest请求
from class_unittest_012.class_exercise.class_http_request import HttpRequest


# 创建一个测试类
class TestKeTang(unittest.TestCase):

    # 初始化,属性可以被实例调用,可以被类函数里面调用
    def setUp(self):  
        # 登录
        self.deng_url = 'https://XXX'
        self.deng_data = {"email": "1851033XXXX", "password": "XXXXX"}
        # 查询
        self.query_url = 'https://XXX'
        # 获取登录后的cookies
        self.cookies = HttpRequest().http_request(self.deng_url, self.deng_data, 'get').cookies
        print('开始执行测试用例了!!!!!!')

    # 正常的账号密码登录
    def test_normal_login(self):  
        data = {"email": "18510336097", "password": "XXXXX"}
        deng_res = HttpRequest().http_request(self.deng_url, data, 'post')
        print(deng_res.json())
        try:
            self.assertEqual(10000, deng_res.json()['code'])
        except AttributeError as e:
            print('用例执行失败{0}!!!!!'.format(e))
            raise e


    # 查询
    def test_query_001(self):
        query_data = {"isstudy": "1", "search": "查询"}
        query_res = HttpRequest().http_request(self.query_url, query_data, 'get', self.cookies)
        print(query_res.json())
        try:
            self.assertEqual(20003, query_res.json()['code'])
        except AttributeError as e:
            print('用例执行失败{0}'.format(e))
            raise e


    def tearDown(self):
        print('用例执行完毕!!!!!')
3、执行测试用例,获取测试报告
import unittest
import HTMLTestRunnerNew
from class_unittest_012.class_exercise import 模块名
#存储用例,加载数据
suite = unittest.TestSuite()
# 创建一个加载测试用例的容器
loader = unittest.TestLoader()
# 从测试类里面加载测试用例
suite.addTest(loader.loadTestsFromModule(模块名))

# 上下文管理器
with open('test_kt_report.html', 'wb') as file:
    runner = HTMLTestRunnerNew.HTMLTestRunner(stream=file, verbosity=2, title='python“课堂派”单元测试报告',
                                              description='报告描述:自动化课堂派测试报告', tester='暖暖')
    runner.run(suite)
第二种:全局变量
 1、创建一个http_request请求测试类
import requests


# 创建一个http请求测试类
class HttpRequest:
    """利用requests封装get请求和post请求"""

    def http_request(self, deng_url, deng_data, method, cookie=None):  
        """url、data、cookie 参数化:
        url:请求的地址 http://xxxx:port
        param(参数):传递的参数,非必填参数,字典格式传递参数
        method:请求方式,支持get以及post请求
        cookie:请求的时候传递的cookie值"""

        # 登录,进行method判断
        if method.lower() == 'get':
        # 响应结果的消息实体
            deng_res = requests.get(deng_url, json=deng_data, cookies=cookie)  
        else:
        # 响应结果的消息实体
            deng_res = requests.post(deng_url, json=deng_data, cookies=cookie)
  
        # 返回一个消息实体
        return deng_res  


if __name__ == '__main__':
    # 创建登录实例
    deng_url = 'https://XXXXX'
    deng_data = {"email": "1851033XXX", "password": "XXXXX", "remember": "0", "code": "", "mobile": "",
                 "type": "login", "reqtimestamp": 1683648560588}
    deng_res = HttpRequest().http_request(deng_url, deng_data, 'post')
    print('登录结果是:', deng_res.json())
    # print('登录cookie是:', deng_res.cookies)

    # 聚合数据登陆后 查询,调用cookies
    query_url = 'https://XXX'
    query_data = {"isstudy": "1", "search": " ", "semester": "", "term": "", "reqtimestamp": 1683649384807}
    # 创建查询实例
    query_res = HttpRequest().http_request(query_url, query_data, 'get', deng_res.cookies)  # 如果接口没有参数,传{}字典,如:(query_url, {}, 'get', deng_res.cookies)
    print('查询结果是:', query_res.json())

2、创建测试用例类

import unittest

from class_unittest_012.class_exercise.class_http_request import HttpRequest

# 全局变量
COOKIE = None  


class TestKeTang(unittest.TestCase):

    # 初始化,属性可以被实例调用,可以被类函数里面调用
    def setUp(self):  
        # 登录
        self.deng_url = 'https://XXX'
        # 查询
        self.query_url = 'https://XXX'
        print('开始执行测试用例了!!!!!!')


    # 正常的账号密码登录
    def test_normal_login(self):  
        global COOKIE  # 声名全局变量
        data = {"email": "1851033XXXX", "password": "XXXXX"}
        deng_res = HttpRequest().http_request(self.deng_url, data, 'post')
        # 如果cookie有的话,那么就会更新COOKIE
        if deng_res.cookies:  
            COOKIE = deng_res.cookies
        print(deng_res.json())
        try:
            self.assertEqual(10000, deng_res.json()['code'])
        except AttributeError as e:
            print('用例执行失败{0}!!!!!'.format(e))
            raise e

    

    def test_query_001(self):
        global COOKIE
        query_data = {"isstudy": "1", "search": "查询"}
        query_res = HttpRequest().http_request(self.query_url, query_data, 'get', COOKIE)
        print(query_res.json())
        try:
            self.assertEqual(20003, query_res.json()['code'])
        except AttributeError as e:
            print('用例执行失败{0}'.format(e))
            raise e


    def tearDown(self):
        print('用例执行完毕!!!!!')
3、执行测试用例,获取测试报告
import unittest
import HTMLTestRunnerNew
from class_unittest_012.class_exercise import 模块名

suite = unittest.TestSuite()
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromModule(模块名))

with open('test_kt_report.html', 'wb') as file:
    runner = HTMLTestRunnerNew.HTMLTestRunner(stream=file, verbosity=2, title='python“课堂派”单元测试报告',
                                              description='报告描述:自动化课堂派测试报告', tester='暖暖')
    runner.run(suite)
第三种:利用反射方式(不强调)

1、学习反射内容

# 创建一个类
class GetData:
    Cookie = '小郭'


if __name__ == '__main__':
     # 打印出属性值
    print(GetData.Cookie) 

    # 可以直接将类里面的属性做修改
    setattr(GetData, 'Cookie', '小黄') 

    # 打印出修改后的属性值
    print(GetData.Cookie)  

    # 判断是否存在属性值
    print(hasattr(GetData, 'Cookie')) 

    # 获取属性值
    print(getattr(GetData, 'Cookie'))    

    # 删除属性值
    delattr(GetData, 'Cookie')           
 1、创建一个http_request请求测试类
import requests


# 创建一个http请求测试类
class HttpRequest:
    """利用requests封装get请求和post请求"""

    def http_request(self, deng_url, deng_data, method, cookie=None):  
        """url、data、cookie 参数化:
        url:请求的地址 http://xxxx:port
        param(参数):传递的参数,非必填参数,字典格式传递参数
        method:请求方式,支持get以及post请求
        cookie:请求的时候传递的cookie值"""

        # 登录,进行method判断
        if method.lower() == 'get':
        # 响应结果的消息实体
            deng_res = requests.get(deng_url, json=deng_data, cookies=cookie)  
        else:
        # 响应结果的消息实体
            deng_res = requests.post(deng_url, json=deng_data, cookies=cookie)
  
        # 返回一个消息实体
        return deng_res  


if __name__ == '__main__':
    # 创建登录实例
    deng_url = 'https://XXXXX'
    deng_data = {"email": "1851033XXX", "password": "XXXXX", "remember": "0", "code": "", "mobile": "",
                 "type": "login", "reqtimestamp": 1683648560588}
    deng_res = HttpRequest().http_request(deng_url, deng_data, 'post')
    print('登录结果是:', deng_res.json())
    # print('登录cookie是:', deng_res.cookies)

    # 聚合数据登陆后 查询,调用cookies
    query_url = 'https://XXX'
    query_data = {"isstudy": "1", "search": " ", "semester": "", "term": "", "reqtimestamp": 1683649384807}
    # 创建查询实例
    query_res = HttpRequest().http_request(query_url, query_data, 'get', deng_res.cookies)  # 如果接口没有参数,传{}字典,如:(query_url, {}, 'get', deng_res.cookies)
    print('查询结果是:', query_res.json())

2、创建一个反射类

class GetData:
    Cookie = None  # 存储cookie,初始值None

3、创建一个测试用例类

import unittest

from class_unittest_012.class_exercise.class_http_request import HttpRequest
#导入反射类
from class_013.class_get_data_demo.get_data import GetData  


class TestKeTang(unittest.TestCase):

    def setUp(self):  # 初始化,属性可以被实例调用,可以被类函数里面调用
        # 登录
        self.deng_url = 'https://XXX'
        # 查询
        self.query_url = 'https://XXX'
        print('开始执行测试用例了!!!!!!')

    def test_normal_login(self):  # 正常的账号密码
        data = {"email": "1851033XXXX", "password": "XXXXX"}
        deng_res = HttpRequest().http_request(self.deng_url, data, 'post')
        if deng_res.cookies:  # 如果cookie有的话,那么就会更新COOKIE,setattr()函数可以直接将类里面的属性做修改
            setattr(GetData, 'Cookie', deng_res.cookies)
        print(deng_res.json())
        try:
            self.assertEqual(10000, deng_res.json()['code'])
        except AttributeError as e:
            print('用例执行失败{0}!!!!!'.format(e))
            raise e


    def test_query_001(self):
        query_data = {"isstudy": "1", "search": "查询"}
        # getattr()函数,获取属性值
        query_res = HttpRequest().http_request(self.query_url, query_data, 'get', getattr(GetData, 'Cookie'))
        print(query_res.json())
        try:
            self.assertEqual(20003, query_res.json()['code'])
        except AttributeError as e:
            print('用例执行失败{0}'.format(e))
            raise e


    def tearDown(self):
        print('用例执行完毕!!!!!')

4、执行测试用例,获取报告

import unittest
import HTMLTestRunnerNew
from class_unittest_012.class_exercise import class_lei

suite = unittest.TestSuite()
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromModule(class_lei))

with open('test_kt_report.html', 'wb') as file:
    runner = HTMLTestRunnerNew.HTMLTestRunner(stream=file, verbosity=2, title='python“课堂派”单元测试报告',
                                              description='报告描述:自动化课堂派测试报告', tester='暖暖')
    runner.run(suite)

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。