【问题标题】:Writing a Python functional test which requires a username and password编写需要用户名和密码的 Python 功能测试
【发布时间】:2017-11-06 18:26:05
【问题描述】:

我有一个用 Python 3 编写的 API 包装类 WfcAPI,我想使用 PyUnit 对其进行测试。

WfcAPIsetUpClass() 涉及登录到外部 API 服务器。当前的功能测试实现的密码为obfuscated with Base64 encoding,但出于安全原因,这与理想的解决方案相差

import unittest
import base64
from pykronos import WfcAPI

class Test(unittest.TestCase):
    @classmethod
    def setUpClass(self):
        password = base64.b64decode("U29tZVBhc3N3b3Jk").decode("utf-8")
        self.kronos = WfcAPI("SomeUsername", password) 

我希望能够为我的 API 包装器快速运行功能测试,但我还想确保我的用户名和密码不包含在代码中。

如何为需要用户名和密码的操作设置 Python 功能测试?

【问题讨论】:

  • 你不能用吗,password = input('Enter Passowrd')
  • @harshil9968 如果我提示用户输入密码,我想用getpass隐藏输入
  • @StevenVascellaro,你可以使用pytest 代替unittest 吗?
  • @lmiguelvargasf 切换到 pytest 会做什么?
  • @StevenVascellaro,它将简化您的测试,因为您不需要创建继承自 unittest.TestCase 的类,如果是 setUp 方法,您可以定义一个夹具。最后,在我看来。 pytest 让测试变得更简单、更愉快 =)。

标签: python python-3.x security functional-testing python-unittest


【解决方案1】:

澄清一下:如果是单元测试,您不应该针对真正的外部 API 进行测试,您应该伪造它的响应。单元测试应该只关注被测主题的逻辑 (WfcAPI) 而不是它的子依赖。

现在,如果您进行功能测试,将真实数据发送到 API,您可以通过将凭据存储在不会与其余代码一起提交的 .env 文件中来保护您的凭据。

This python library 提供了该功能,并在其自述文件中为您提供了一个示例。你最终会得到这样的结果:

# .env

PASSWORD=some_password
USERNAME=SomeUsername

然后在你的settings.py:

PASSWORD = os.environ.get("PASSWORD")
USERNAME = os.environ.get("USERNAME")

【讨论】:

猜你喜欢
  • 2019-12-23
  • 2014-04-02
  • 1970-01-01
  • 2012-06-16
  • 2010-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多