PyTest:修复重复代码并删除依赖项

时间:2018-11-12 11:16:23

标签: python-3.x rest pytest

我正在使用pytest为API编写测试。 测试的结构如下:

KEEP_BOX_IDS = ["123abc"]

@pytest.fixture(scope="module")
def s():
    UID = os.environ.get("MYAPI_UID")
    if UID is None:
        raise KeyError("UID not set in environment variable")
    PWD = os.environ.get("MYAPI_PWD")
    if PWD is None:
        raise KeyError("PWD not set in environment variable")
    return myapi.Session(UID, PWD)



@pytest.mark.parametrize("name,description,count", [
    ("Normal Box", "Normal Box Description", 1),
    ("ÄäÖöÜüß!§", "ÄäÖöÜüß!§", 2),
    ("___--_?'*#", "\n\n1738\n\n", 3),
])
def test_create_boxes(s, name, description, count):
    box_info_create = s.create_box(name, description)
    assert box_info_create["name"] == name
    assert box_info_create["desc"] == description
    box_info = s.get_box_info(box_info_create["id"])
    assert box_info["name"] == name
    assert box_info["desc"] == description
    assert len(s.get_box_list()) == count + len(KEEP_BOX_IDS)


def test_update_boxes(s):
    bl = s.get_box_list()
    for b in bl:
        b_id = b['id']
        if b_id not in KEEP_BOX_IDS:
            new_name = b["name"] + "_updated"
            new_desc = b["desc"] + "_updated"
            s.update_box(b_id, new_name, new_desc)
            box_info = s.get_box_info(b_id)
            assert box_info["name"] == new_name
            assert get_box_info["desc"] == new_desc

我使用固定装置来设置会话(这将使我保持与API的连接)。

您可以看到我在开始时创建了3个框。 接下来的所有测试都在这3个框上进行某种操作。 (框只是文件夹和文件的空间)

例如:update_boxes,create_folders,rename_folders,upload_files,change_file名称等。

我知道这样做不好,因为所有测试都是相互依赖的,但是如果我以正确的顺序执行它们,那么测试是有效的,那就足够了。

第二个问题,最让我感到困扰的是,以下所有测试均以相同的行开头:

bl = s.get_box_list()
for b in bl:
    b_id = b['id']
    if b_id not in KEEP_BOX_IDS:
        box_info = s.get_box_info(b_id)

我总是需要调用此for循环来获取每个box的ID和信息。 我尝试将其放在第二个灯具中,但问题是那时将有两个灯具。 有更好的方法吗?

谢谢

0 个答案:

没有答案