python关于seldom框架的整理

seldom的安装

直接pip install seldom 然后安装完成之后可以 利用pip show seldom 来看安装的版本以及一些信息

 

seldom来编写请求

 

import seldom
from seldom.utils import cache
from tokener import Cache


class TestRequest(seldom.TestCase):
    """
    测试用例的类
    """

    def start(self):
        """
        类似初始化
        :return:
        """
        self.url = "http://localhost:8000/api/docs"
        # 调用tokener文件中的 设置缓存类
        Cache.set_cache()
        # 从缓存中获取到需要的token
        self.token = cache.get("access_token")
        self.headers = {
            "Content-Type": "application/json",
            "Authorization": f"Bearer {self.token}"
        }

    def test_case(self):
        # self 直接拿上面的token
        self.get(self.url, params={}, headers=self.headers)
        self.assertStatusCode(200)

    def test_creat_project(self):
        body = {
            "name": "string",
            "address": "string",
            "cover_name": "string",
            "path_name": "string"
        }
        self.post(self.url, json=body, headers=self.headers)
        self.assertStatusCode(200)
        print(self.response)


if __name__ == '__main__':
    # 单独debug方式,采用是case=py文件名称接测试类接具体运行的函数
    # 不需要生成测试报告就debug=True
    seldom.main(case='demo.TestRequest.test_case', debug=True)

    # 默认debug=False
    # seldom.main(case='demo.TestRequest.test_case')

    # 运行所有
    # seldom.main()

 

在做接口测试时,经常需要进行鉴权,也就是token验证,那么可以利用seldom中cache 来自己设置,类似于你新建了一个文件专门来存放这个token的

cache的方便之处是可以随时进行读取,在运行测试类是在初始化的时候可以 先调用设置chche的方式来保证,后续所有的case 都可以直接利用上面的token

from seldom.utils import cache


class Cache:
    """
    先初始化删除缓存中所有的内容
    """
    def __init__(self):
        cache.clear()

    @staticmethod
    def set_cache():
        """
        重新设置缓存里面的内容
        作用是,当进行接口测试时,需要用到token,可以利用该缓存方式
        :return:
        """
        cache.set({"client_id": "123456"})
        cache.set({"client_secret": "37D5211D-404B-69D2-7482-D04CAD601281"})
        cache.set({"access_token": "base64_str"})

这个 access_token 就是接口需要的token,当然不是写死的,在设置之前可以先请求一次获取token的接口来拿到token,然后再写入缓存。自此cache就设置成功。

前面的 client_id、client_secret是我的项目需要的东西。设置成功之后在测试用例类里面 start方法里面先请求一下这个类, 也就是 Cache.set_cache()

然后随意取用。 以上是token的使用方式,以及get请求发起方式,类似unittest seldom 好用之处是这个缓存和断言,发起请求只需 self.post 或者self.get

 

seldom的断言

main() 方法

main()方法是seldom运行测试的入口, 它提供了一些最基本也是重要的配置。

import seldom

# ...

if __name__ == '__main__':

    seldom.main(path="./",
                browser="chrome",
                base_url=None,
                report=None,
                title="百度测试用例",
                tester="虫师",
                description="测试环境:chrome",
                debug=False,
                rerun=0,
                save_last_run=False,
                language="en",
                timeout=None,
                whitelist=[],
                blacklist=[]
    )

参数说明

  • path : 指定测试目录或文件, 与case参数互斥。
  • case : 指定测试用例, 与path参数互斥。
  • browser : 针对Web UI测试需要指定浏览器("chrome"、"firefox" 等)。
  • base_url : 针对HTTP接口测试的参数,设置全局的URL。
  • report : 自定义测试报告的名称,默认格式为2020_04_04_11_55_20_result.html
  • title : 指定测试报告标题。
  • tester : 指定测试人员, 默认Anonymous
  • description : 指定测试报告描述。
  • debug : debug模式,设置为True不生成测试HTML测试,默认为False
  • rerun : 设置失败重新运行次数,默认为 0
  • save_last_run : 设置只保存最后一次的结果,默认为False
  • language : 设置HTML报告中英文,默认en, 中文zh-CN
  • timeout : 设置超时时间,默认10秒。
  • whitelist : 用例标签(label)设置白名单。
  • blacklist : 用例标签(label)设置黑名单

 

当一个接口返回如下:需要断言args时

{
  "args": {
    "hobby": [
      "basketball",
      "swim"
    ],
    "name": "tom"
  },
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.25.0",
    "X-Amzn-Trace-Id": "Root=1-62851614-1ca9fdb276238c60406c118f"
  },
  "origin": "113.87.15.99",
  "url": "http://httpbin.org/get?name=tom&hobby=basketball&hobby=swim"
}
import seldom


class TestAPI(seldom.TestCase):

    def test_assert_json(self):
        # 接口参数
        payload = {"name": "tom", "hobby": ["basketball", "swim"]}
        # 接口调用
        self.get("http://httpbin.org/get", params=payload)

        # 断言数据
        assert_data = {
            "hobby": ["swim", "basketball"],
            "name": "tom"
        }
        self.assertJSON(assert_data, self.response["args"])

 

self.assertJSON(assert_data, self.response["args"])  很方便的

相对于unittest要简化很多。



#接口返回数据如下
{
"args": { "hobby": ["basketball", "swim"], "name": "tom" } } #seldom中可以通过path进行断言: import seldom class TestAPI(seldom.TestCase): def test_assert_path(self): payload = {'name': 'tom', 'hobby': ['basketball', 'swim']} self.get("http://httpbin.org/get", params=payload) self.assertPath("args.name", "tom") self.assertPath("args.hobby[0]", "basketball") self.assertInPath("args.hobby[0]", "ball")

 

 

#数据驱动
#seldom本来就提供的有强大的数据驱动,拿来做接口测试非常方便。

@data

import seldom
from seldom import data


class TestDDT(seldom.TestCase):

    @data([
        ("key1", 'value1'),
        ("key2", 'value2'),
        ("key3", 'value3')
    ])
    def test_data(self, key, value):
        """
        Data-Driver Tests
        """
        payload = {key: value}
        self.post("/post", data=payload)
        self.assertStatusCode(200)
        self.assertEqual(self.response["form"][key], value)

@file_data

创建data.json数据文件

{
 "login":  [
    ["admin", "admin123"],
    ["guest", "guest123"]
 ]
}
通过file_data实现数据驱动。

import seldom
from seldom import file_data


class TestDDT(seldom.TestCase):

    @file_data("data.json", key="login")
    def test_data(self, username, password):
        """
        Data-Driver Tests
        """
        payload = {username: password}
        self.post("http://httpbin.org/post", data=payload)
        self.assertStatusCode(200)
        self.assertEqual(self.response["form"][username], password)

 

 
posted @ 2022-07-04 16:40  以泪为证  阅读(973)  评论(0)    收藏  举报