使用seldom编写http接口用例

在编写接口用例的过程中,针对一个接口,往往只是参数不同,那么参数化就非常有必要了。

seldom 中参数化的用法非常灵活,这里仅介绍@file_data() 的N种玩法。

二维列表

当参数比较简单时可以试试下面的方式。

  • 参数化数据
{
 "add_guest":  [
   ["参数错误", "", "", 10021, "parameter error"],
   ["查询为空", "tom", "13711001100", 10022, "event id null"],
 ]
}
  • 测试用例
import seldom
from seldom import file_data


class AddGuestTest(seldom.TestCase):

    @file_data("add_guest.json", key="add_guest")
    def test_case(self, _, real_name, phone, status, msg):
        payload = {"realname": real_name, "phone": phone}
        self.post("/api/add_guest/", data=payload)
        self.assertStatusCode(200)
        self.assertPath("status", status)
        self.assertPath("message", msg)


if __name__ == "__main__":
    seldom.main(base_url="http://127.0.0.1:8000", debug=True)

列表嵌套字典

当参数很多时,不便于阅读,可以通过字典的方式定义。

  • 参数化数据
{
  "add_guest": [
    {
      "name": "参数错误",
      "real_name": "",
      "phone": "",
      "status": 10021,
      "msg": "parameter error"
    },
    {
      "name": "查询为空",
      "real_name": "tom",
      "phone": "13711001100",
      "status": 10022,
      "msg": "event id null"
    },
  ]
}
  • 测试用例
import seldom
from seldom import file_data


class AddGuestTest(seldom.TestCase):

    @file_data("add_guest.json", key="add_guest")
    def test_case(self, _, real_name, phone, status, msg):
        payload = {"realname": real_name, "phone": phone}
        self.post("/api/add_guest/", data=payload)
        self.assertStatusCode(200)
        self.assertPath("status", status)
        self.assertPath("message", msg)


if __name__ == "__main__":
    seldom.main(base_url="http://127.0.0.1:8000", debug=True)

复杂的数据结构

我们可以将接口的入参、出参进一步拆分。

  • 参数化数据
{
  "add_guest": [
    {
      "name": "参数错误",
      "req": {
        "real_name": "",
        "phone": ""
      },
      "resp": {
         "status": 10021,
          "msg": "parameter error"
      }
    },
    {
      "name": "查询为空",
      "req": {
        "real_name": "tom",
        "phone": "13711001100"
      },
      "resp": {
        "status": 10022,
        "msg": "event id null"
      }
    }
  ]
}
  • 测试用例
import seldom
from seldom import file_data


class AddGuestTest(seldom.TestCase):

    @file_data("add_guest.json", key="add_guest")
    def test_case(self, _, req, resp):
        payload = {"realname": req["real_name"], "phone": req["phone"]}
        self.post("/api/add_guest/", data=payload)
        self.assertStatusCode(200)
        self.assertPath("status", resp["status"])
        self.assertPath("message", resp["msg"])


if __name__ == "__main__":
    seldom.main(base_url="http://127.0.0.1:8000", debug=True)

通过json编写用例

虽然不推荐用文件写用例,你想写也是可以的。

  • 测试用例文件
{
  "cases": [
    {
      "name": "参数错误",
      "method": "post",
      "url": "/api/add_guest/",
      "req": {
        "eid": "",
        "real_name": "",
        "phone": ""
      },
      "resp": {
         "status": 10021,
          "msg": "parameter error"
      }
    },
    {
      "name": "查询为空",
      "method": "post",
      "url": "/api/add_guest/",
      "req": {
        "eid": 901,
        "real_name": "tom",
        "phone": "13711001100"
      },
      "resp": {
        "status": 10022,
        "msg": "event id null"
      }
    }
  ]
}
  • 解析测试用例

import seldom
from seldom import file_data


class SampleCaseTest(seldom.TestCase):

    @file_data("test_case.json", key="cases")
    def test_case(self, _, method, url, req, resp):
        if method == "post":
            payload = {"eid": req["eid"], "realname": req["real_name"], "phone": req["phone"]}
            self.post(url, data=payload)
            self.assertStatusCode(200)
            self.assertPath("status", resp["status"])
            self.assertPath("message", resp["msg"])
        elif method == "get":
            pass


if __name__ == "__main__":
    seldom.main(base_url="http://127.0.0.1:8000", debug=True)

最后的这种写法不是seldom推荐的,假如要测试的接口足够简单,设计一个测试方法来处理简单的接口也未尝不可。当然,往往实际项目中的用例并不足够简单。回到代码的方式编写才能足够个兼具灵活性和易用性。

最后作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些软件测试的学习资源,希望能给你前进的路上带来帮助。

视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

<think>好的,我现在需要回答用户关于在影刀中使用seldom框架的问题。首先,我要确认自己对这两个工具的了解程度。影刀应该是一个RPA(机器人流程自动化)工具,而seldom是一个基于Python的自动化测试框架,结合了unittest和Selenium。用户可能想知道如何在影刀中集成seldom来进行自动化测试,特别是Web自动化。 首先,我需要回忆一下影刀的功能。影刀主要用于自动化办公任务,比如操作Excel、浏览器、桌面应用等,而seldom则是专门用于测试的框架,支持Selenium,可能用于Web UI自动化测试。用户可能希望将两者结合,利用影刀的RPA能力和seldom的测试功能,提升自动化流程的质量。 接下来,我需要考虑如何在影刀中调用seldom。影刀通常使用自有的脚本语言或者支持Python脚本,所以可能需要通过Python节点来集成。用户可能需要在影刀中编写Python代码,引入seldom库,并执行测试用。 然后,我需要思考可能的步骤。如,在影刀中创建一个Python脚本节点,安装seldom库,编写测试用,然后运行。但要注意影刀的环境是否支持Python第三方库的安装,以及是否有权限或路径问题。 另外,需要确认seldom和影刀的兼容性。比如,seldom依赖的浏览器驱动是否能在影刀的环境中正确配置,比如ChromeDriver或者GeckoDriver。可能需要用户在影刀的环境中预先安装这些驱动,或者指定路径。 可能遇到的问题包括环境配置、库的安装、以及如何将测试结果反馈到影刀的流程中。比如,测试失败时,影刀是否能捕获异常并执行相应的处理步骤,比如发送邮件或记录日志。 还需要给出一个具体的子,说明如何在影刀中编写一个简单的seldom测试用,比如打开网页,进行断言,并生成测试报告。同时,要提到seldom的高级功能,比如数据驱动、Fixture、Page Object模式等,如何应用在影刀中,提升测试效率。 最后,要提醒用户注意版本兼容性和错误处理,确保自动化流程的稳定性。可能还需要比较使用seldom和影刀自有的浏览器自动化功能的优缺点,帮助用户做出合适的选择。</think>在影刀(一款RPA工具)中使用seldom(基于Python的自动化测试框架)的整合步骤如下: --- ### 一、核心概念 1. **影刀** - RPA工具,支持通过可视化流程或Python脚本实现自动化操作(如Excel处理、浏览器控制、API调用等)。 2. **seldom** - 基于`unittest`和`Selenium`的测试框架,提供简洁的语法和丰富的断言方法,适合Web自动化测试。 --- ### 二、整合步骤 #### 1. 环境准备 ```python # 影刀中通过Python节点安装seldom pip install seldom # 安装浏览器驱动(如ChromeDriver) # 需确保驱动版本与浏览器匹配 ``` #### 2. 编写测试用 ```python # 影刀中通过Python脚本节点调用seldom import seldom class BaiduTest(seldom.TestCase): def test_search(self): self.open("https://www.baidu.com") self.type(id_="kw", text="影刀RPA") self.click(id_="su") self.assertTitle("影刀RPA_百度搜索") if __name__ == "__main__": seldom.main() ``` #### 3. 执行与报告 - **运行测试**:在影刀流程中调用Python脚本执行测试。 - **生成报告**:seldom默认生成HTML报告(`reports/`目录),可结合影刀的文件操作节点读取结果。 --- ### 三、应用场景 1. **自动化巡检** - 定时检查Web页面功能是否正常。 2. **数据校验** - 在RPA流程中插入测试步骤,验证网页数据准确性。 3. **异常捕获** - 通过断言失败触发影刀的异常处理逻辑(如发送告警邮件)。 --- ### 四、注意事项 - **浏览器驱动配置** 确保`chromedriver`或`geckodriver`的路径在影刀环境中可访问。 - **依赖管理** 若影刀使用独立Python环境,需通过脚本节点安装seldom及依赖。 - **异步操作处理** 结合`seldom`的显式等待方法(如`self.wait()`)避免因页面加载导致的失败。 --- ### 五、高级用法 1. **数据驱动测试** ```python @seldom.data([ ("case1", "影刀"), ("case2", "seldom") ]) def test_search(self, name, keyword): self.type(id_="kw", text=keyword) # 断言逻辑... ``` 2. **Page Object模式** 封装页面元素提升代码复用性。 3. **集成CI/CD** 通过影刀触发测试任务,并将结果同步至Jenkins等工具。 --- ### 六、常见问题 - **Q**: 影刀中运行时报错`WebDriverException`? **A**: 检查浏览器驱动版本及环境变量配置。 - **Q**: 如何传递参数给测试用? **A**: 通过影刀变量注入到Python脚本中(如`os.environ`)。 通过结合影刀的流程控制与seldom的测试能力,可实现更健壮的自动化解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值