{ "info": { "author": "lit", "author_email": "tt137378245@outlook.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# Rado_InterFace_test\n\n\u57fa\u4e8epytest + requests + excel/json/yaml + locust + allure \u7684\u63a5\u53e3\u6d4b\u8bd5\u4e0e\u63a5\u53e3\u6027\u80fd\u81ea\u52a8\u5316\u6d4b\u8bd5\u6846\u67b6\u3002\n\n>\u6267\u884c\u524d\u7f6e\u6761\u4ef6 - \u8bfb\u53d6\u63a5\u53e3\u4fe1\u606f\uff08\u8bf7\u6c42\u65b9\u6cd5\u3001URL\u3001\u53c2\u6570\uff09- \u53d1\u9001\u8bf7\u6c42 - \u9a8c\u8bc1\u7ed3\u679c\uff08checkpoints\u3001validate\uff09- \u6267\u884c\u540e\u7f6e\u6536\u5c3e\u5de5\u4f5c\u3002\n\n\n\n## \u529f\u80fd\u4ecb\u7ecd\n\n| \u8bfb\u53d6excel\u4e2d\u6d4b\u8bd5\u7528\u4f8b |\n| ------------------------------------------------------------ |\n| \u8bfb\u53d6json\u4e2d\u6d4b\u8bd5\u7528\u4f8b |\n| \u8bfb\u53d6\u6d4b\u8bd5\u7ba1\u7406\u5e73\u53f0\u6570\u636e\u5e93\u4e2d\u6d4b\u8bd5\u7528\u4f8b |\n| \u8bfb\u53d6ymal\u4e2d\u6d4b\u8bd5\u7528\u4f8b |\n| \u8bfb\u53d6excel\u4e2d\u6d4b\u8bd5\u7528\u4f8b\u6570\u636e\u901a\u8fc7\u63d0\u524d\u5b9a\u4e49\u7684\u6a21\u677f\u81ea\u52a8\u751f\u6210 |\n| \u8bfb\u53d6json\u4e2d\u6d4b\u8bd5\u7528\u4f8b\u6570\u636e\u901a\u8fc7\u63d0\u524d\u5b9a\u4e49\u7684\u6a21\u677f\u81ea\u52a8\u751f\u6210 |\n| \u8bfb\u53d6\u6d4b\u8bd5\u7ba1\u7406\u5e73\u53f0\u6570\u636e\u5e93\u4e2d\u6d4b\u8bd5\u7528\u4f8b\u6570\u636e\u901a\u8fc7\u63d0\u524d\u5b9a\u4e49\u7684\u6a21\u677f\u81ea\u52a8\u751f\u6210 |\n| \u8bfb\u53d6ymal\u4e2d\u6d4b\u8bd5\u7528\u4f8b\u6570\u636e\u901a\u8fc7\u63d0\u524d\u5b9a\u4e49\u7684\u6a21\u677f\u81ea\u52a8\u751f\u6210 |\n| \u624b\u52a8\u7f16\u5199\u6d4b\u8bd5\u7528\u4f8b\u4ee3\u7801\uff08\u9700\u8981\u7b26\u5408PyTest\u89c4\u8303\uff09 |\n| \u652f\u6301HTTP\u534f\u8bae\u7684\u4e0d\u540c\u65b9\u5f0f\u8bf7\u6c42\uff0c\u5982GET\u3001POST\u3001PUT\u3001DELETE\u3001PATCH\u7b49\u8bf7\u6c42\u65b9\u5f0f\u3002 |\n| \u652f\u6301RPC\u534f\u8bae\u7684\u4e0d\u540c\u65b9\u5f0f\u8bf7\u6c42\uff0c\u5982 |\n| HTTP\u8bf7\u6c42\u652f\u6301URL\u8bf7\u6c42\u53c2\u6570\u53caBODY\u8bf7\u6c42\u53c2\u6570 |\n| HTTP\u8bf7\u6c42\u652f\u6301JSON\u683c\u5f0f\u7684\u8bf7\u6c42 |\n| HTTP\u8bf7\u6c42\u652f\u6301XML\u7b49\u6570\u636e\u683c\u5f0f\u7684\u8bf7\u6c42 |\n| \u4ec5\u9a8c\u8bc1status_code |\n| \u9a8c\u8bc1status_code + response_body\u7684\u6574\u4f53\u9a8c\u8bc1 |\n| \u9a8c\u8bc1status_code + response_body\u6307\u5b9a\u5b57\u6bb5\u7684\u9a8c\u8bc1\uff08\u4f7f\u7528\u9ed8\u8ba4\u5b57\u6bb5\u67e5\u627e\u8def\u5f84\uff09 |\n| \u9a8c\u8bc1status_code + response_body\u6307\u5b9a\u5b57\u6bb5\u7684\u9a8c\u8bc1\uff08\u5728validator\u4e2d\u7ed9\u5b9a\u5b57\u6bb5\u67e5\u627e\u8def\u5f84\uff09 |\n| == \u9a8c\u8bc1 |\n| in\u9a8c\u8bc1 |\n| len\u9a8c\u8bc1 |\n| key\u9a8c\u8bc1 |\n| \u7528\u4f8b\u6267\u884clog |\n| \u7528\u4f8b\u6267\u884c\u7ed3\u679cjson\u6587\u4ef6\u8bb0\u5f55 |\n| \u7528\u4f8b\u6267\u884c\u7ed3\u679c\u6570\u636e\u5e93\u8bb0\u5f55 |\n| excel/json/ymal/\u6570\u636e\u5e93\u56db\u79cd\u65b9\u5f0f\u7ef4\u62a4\u7684\u6d4b\u8bd5\u7528\u4f8b\u76f8\u4e92\u8f6c\u6362\uff08\u5bfc\u5165\u3001\u5bfc\u51fa\u5de5\u5177\uff09 |\n| \u901a\u8fc7\u914d\u7f6e\u6587\u4ef6\u8fdb\u884c\u6d4b\u8bd5\u914d\u7f6e\u7ba1\u7406 |\n| \u4eceSWAGGER\u6216\u8005\u5176\u4ed6\u652f\u6301HAR\u6807\u51c6\uff0c\u6293\u5305\u5de5\u5177\u6d4b\u8bd5\u5de5\u5177\u4e2d\u89e3\u6790\u63a5\u53e3\u4fe1\u606f\u81ea\u52a8\u751f\u6210\u57fa\u672c\u6d4b\u8bd5\u7528\u4f8b\u5de5\u5177 |\n| \u63d0\u4f9b\u9879\u76ee\u811a\u624b\u67b6\uff0c\u80fd\u591f\u901a\u8fc7cli\u7b49\u65b9\u5f0f\u81ea\u52a8\u751f\u6210\u901a\u7528\u6027\u8f83\u9ad8\u7684\u6d4b\u8bd5\u9879\u76ee\u7ed3\u6784 |\n| \u4e00\u952e\u6267\u884c\uff0c\u80fd\u591f\u6307\u5b9a\u6267\u884c\u7279\u5b9a\u7528\u4f8b\u3002 |\n| allure\u6d4b\u8bd5\u62a5\u544a\u751f\u6210\uff0c\u5bfc\u51fa\u3002 |\n| \u652f\u6301\u5bb9\u5668\u65b9\u5f0f\u8fd0\u884c\u3002 |\n| \u96c6\u6210locust\uff0c \u80fd\u591f\u8fdb\u884c\u57fa\u672c\u7684\u63a5\u53e3\u6027\u80fd\u6d4b\u8bd5\u3002 |\n| |\n\n\n\n## QuikStart\n\n- \u547d\u4ee4\u884c\u63a5\u53e3\n- \u9879\u76ee\u7ed3\u6784\n- \u6d4b\u8bd5\u7528\u4f8b\u7f16\u5199\n- \u6d4b\u8bd5\u4ee3\u7801\u7f16\u5199\n- \u6267\u884c\u6d4b\u8bd5\n- \u751f\u6210\u6d4b\u8bd5\u62a5\u544a\n\n\n\n### \u547d\u4ee4\u884c\u63a5\u53e3\n\n```\n# rado --help\nUsage: rado [OPTIONS] COMMAND [ARGS]...\n\n Rado.\n\n The interface test and interface performance automation test framework\n based on pytest + requests + excel/json/yaml + locust + allure.\n\nOptions:\n --help Show this message and exit.\n\nCommands:\n check Check your testcase file(excel).\n create Create a new project.\n gen Generate init test code based on code template\n run Execute test cases.\n\n```\n\n\n\n### \u9879\u76ee\u7ed3\u6784\n\n\u751f\u6210\u7684\u6d4b\u8bd5\u9879\u76ee\u7ed3\u6784\u5982\u4e0b\n\n> \u251c\u2500\u2500 conftest.py \n> \u251c\u2500\u2500 core \n> \u2502\u00a0\u00a0 \u2514\u2500\u2500 __init__.py \n> \u251c\u2500\u2500 docker-compose.yml \n> \u251c\u2500\u2500 __init__.py \n> \u251c\u2500\u2500 logs \n> \u2502\u00a0\u00a0 \u2514\u2500\u2500 __init__.py \n> \u251c\u2500\u2500 preparedData \n> \u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py \n> \u2502\u00a0\u00a0 \u2514\u2500\u2500 Project_ModelName_test_data.xlsx \n> \u251c\u2500\u2500 Readme.md \n> \u251c\u2500\u2500 Result \n> \u2502\u00a0\u00a0 \u2514\u2500\u2500 __init__.py \n> \u251c\u2500\u2500 test_case \n> \u2502\u00a0\u00a0 \u2514\u2500\u2500 __init__.py \n> \u2514\u2500\u2500 utilse \n> \u2514\u2500\u2500 __init__.py \n\n\u5176\u4e2d\uff1a\n\n - preparedData: \u5b58\u653e\u6d4b\u8bd5\u7528\u4f8b\u4fe1\u606f\uff0c\u5f53\u524d\u4f7f\u7528Excel\u8fdb\u884c\u7ba1\u7406\u3002\n\n - test_case: \u5b58\u653e\u6d4b\u8bd5\u7528\u4f8b\u4ee3\u7801\u3002\n\n > File: test_case.py \u2014\u2014 \u76f8\u5f53\u4e8e\u529f\u80fd\u6a21\u5757/\u7ec4\u4ef6/\u4e1a\u52a1\u573a\u666f\u7ea7\u522b\u7684TestSuite\u3002 \n >\n > \u200b\tClass: TestCase \u2014\u2014 \u76f8\u5f53\u4e8e\u5355\u4e2a\u63a5\u53e3\u7ea7\u522bTestSuite\u3002\n >\n > \u200b\t\tMethod\uff1a test_case() \u2014\u2014 \u6d4b\u8bd5\u7528\u4f8b\n\n- result\uff1a \u5b58\u653e\u6d4b\u8bd5\u6570\u636e\u3001\u65e5\u5fd7\u53ca\u6d4b\u8bd5\u62a5\u544a\u3002\n\n- utilse\uff1a \u5b58\u653e\u5728\u7f16\u5199\u6d4b\u8bd5\u7528\u4f8b\u4ee3\u7801\u65f6\u9700\u8981\u4f7f\u7528\u5230\u7684\u5de5\u5177\u51fd\u6570\uff0c\u4f8b\u5982\u8bfb\u53d6\u4eceExcel\u4e2d\u8bfb\u53d6\u6570\u636e\u3002\n\n- core\uff1a \u5b58\u653e\u81ea\u5b9a\u4e49\u7684Exception\uff0cLogger\u7b49\u5b9e\u4f8b\uff0c\u907f\u514d\u90e8\u5206\u6a21\u5757\u7684\u5faa\u73af\u5bfc\u5165\u3002\n\n- \u9876\u5c42__init__.py: \u5b58\u653eBaseTest\u7c7b\uff0c\u6240\u6709\u7684\u6d4b\u8bd5\u7528\u4f8b\u5747\u57fa\u4e8e\u8be5\u7c7b\uff0c\u63d0\u4f9b\u5982\u4e0b\u7279\u6b8a\u65b9\u6cd5\uff1a\n\n 1. `setup_class()`: \u5728\u6267\u884cTestCase Class\u4e2d\u6240\u6709\u6d4b\u8bd5\u7528\u4f8b\u4e4b\u524d\u8fdb\u884c\u4e00\u4e9b\u51c6\u5907\u5de5\u4f5c\uff0c\u4f8b\u5982\u51c6\u5907\u6d4b\u8bd5\u6570\u636e\u3001\u767b\u5f55\u7cfb\u7edf\u7b49\u64cd\u4f5c\u3002\n\n 2. `teardown_class`: \u5728\u6267\u884cTestCase Class\u4e2d\u6240\u6709\u6d4b\u8bd5\u7528\u4f8b\u4e4b\u540e\u8fdb\u884c\u4e00\u4e9b\u6536\u5c3e\u5de5\u4f5c\uff0c\u4f8b\u5982\u6e05\u9664\u6d4b\u8bd5\u6570\u636e\u3001\u91cd\u65b0\u521d\u59cb\u5316\u73af\u5883\u7b49\u64cd\u4f5c\u3002\n\n 3. `setup_method()`: \u5728\u6267\u884c\u67d0\u4e2a\u6d4b\u8bd5\u7528\u4f8b\u4e4b\u524d\u8fdb\u884c\u4e00\u4e9b\u51c6\u5907\u5de5\u4f5c\uff0c\u4f8b\u5982\u51c6\u5907\u6d4b\u8bd5\u6570\u636e\u3001\u767b\u5f55\u7cfb\u7edf\u7b49\u64cd\u4f5c\u3002`\n\n 4. `teardown_method`: \u5728\u6267\u884c\u5355\u4e2a\u6d4b\u8bd5\u7528\u4f8b\u4e4b\u540e\u8fdb\u884c\u4e00\u4e9b\u6536\u5c3e\u5de5\u4f5c\uff0c\u4f8b\u5982\u6e05\u9664\u6d4b\u8bd5\u6570\u636e\u3001\u91cd\u65b0\u521d\u59cb\u5316\u73af\u5883\u7b49\u64cd\u4f5c\u3002\n\n 5. `make_requests()`: \u6839\u636e\u6d4b\u8bd5\u7528\u4f8b\u63cf\u8ff0\u4fe1\u606f\uff0c\u4f7f\u7528Request\u6a21\u5757\u53d1\u9001\u5bf9\u5e94http\u8bf7\u6c42\uff0c\u5305\u542b\u4e3b\u8981\u8bf7\u6c42\u53c2\u6570method\u3001url\u7b49\u7684\u7b80\u5355\u6821\u9a8c\u3002\n\n 6. `diff_respons()`: \u6bd4\u5bf9\u63a5\u53e3\u8fd4\u56de\u7ed3\u679c\u4e0e\u6d4b\u8bd5\u7528\u4f8b\u4e2d\u63cf\u8ff0\u7684\u9884\u671f\u8fd4\u56de\u7ed3\u679c\u3002\n\n > \u5f53\u524d\u4e3b\u8981\u5bf9Respons\u72b6\u6001\u7801\uff0cBody\u8fdb\u884c\u5bf9\u6bd4\u3002\n\n\n\n### \u7f16\u5199\u6d4b\u8bd5\u7528\u4f8b\n\n- \u63a5\u53e3\u6d4b\u8bd5\u7528\u4f8b\u7f16\u5199\uff08Excel\uff09\n- \u6d4b\u8bd5\u7528\u4f8b\u4ee3\u7801\u7f16\u5199\n\n#### \u63a5\u53e3\u6d4b\u8bd5\u7528\u4f8b\u7f16\u5199\n\n\u57fa\u4e8e\u8981\u56e0\u5206\u6790\u8868\u7f16\u5199\u6d4b\u8bd5\u7528\u4f8b\uff0c\u5305\u542b\u63a5\u53e3\u76f8\u5173\u4fe1\u606f\uff0c\u5982\u8bf7\u6c42\u65b9\u6cd5\u3001URL\u3001\u53c2\u6570\u3001\u9884\u671f\u8fd4\u56de\u503c\u7b49\u4fe1\u606f\u3002\n\n\u5176\u4e2d\uff0cExcel\u81f3\u5c11\u5305\u542b\u5982\u4e0b18\u4e2a\u5b57\u6bb5\uff0c\u5e76\u4e14\u987a\u5e8f\u4e0e\u540d\u79f0\u9700\u8981\u76f8\u540c\u3002\n\n| \u6d4b\u8bd5\u7528\u4f8b\u756a\u53f7 | \u6d4b\u8bd5\u7528\u4f8b\u540d | level | \u9884\u7f6e\u6761\u4ef6 | \u6d4b\u8bd5\u5185\u5bb9 | \u9884\u671f\u7ed3\u679c | category | automated | caseid | method | url | data | status_code | checkpoints | validate | parameterize | result |\n| ------------ | -------------- | ----- | -------------- | ---------------------------- | --------------------------------- | -------- | --------- | ------ | ------ | -------------------------------------------------------- | ---- | ----------- | ------------------------------------------------------------ | -------- | ------------ | ------ |\n| Insert_001 | \u63d2\u5165\u63a5\u53e3\u7a7a\u53c2\u6570 | 1 | 1.\u63d2\u5165\u63a5\u53e3\u53ef\u7528 | 1.\u8c03\u7528\u6570\u636e\u63d2\u5165\u63a5\u53e3 2.\u63d2\u5165{ } | 1.\u63d2\u5165\u5931\u8d25 2.respones\u6d88\u606f\u63d0\u793a\u6b63\u786e | \u5f02\u5e38\u7cfb | 2 | 9033 | GET | [/api/tests/](http://192.168.20.47:8080/datanode/simple) | {} | 422 | { \"code\":\"422\", \"detail\": { \"test_para_a\":[\"Missing data for required field.\"], \"test_para_b\":[\"Missing data for required field.\"] }, \"message\":\"\\u8bf7\\u6c42\\u6570\\u636e\\u6821\\u9a8c\\u5931\\u8d25\" } | | | |\n| | | | | | | | | | | | | | | | | |\n\n\n\n- level\uff1a\u6d4b\u8bd5\u7528\u4f8b\u7b49\u7ea7\uff0c\u4e00\u822c\u6b63\u5e38\u7cfb\u4e3a`1`\uff0c\u5f02\u5e38\u7cfb\u4e3a`2`\u4ee5\u4e0a\uff0c\u5176\u4e2d\u6d4b\u8bd5\u7b49\u7ea7\u4e3a1\u7684\u6d4b\u8bd5\u7528\u4f8b\u7528\u4e8e\u6307\u6d3e\u5192\u70df\u6d4b\u8bd5\n- automated\uff1a\u8be5\u503c\u4e3a`2`\u8868\u793a\u8be5\u6761\u7528\u4f8b\u4e3a\u81ea\u52a8\u6267\u884c\uff0c\u503c\u4e3a`1`\u8868\u793a\u624b\u52a8\u6267\u884c\uff08\u8fd9\u4e48\u8bbe\u8ba1\u662f\u4e3a\u4e86\u9002\u5e94Testlink\u7684\u795e\u903b\u8f91\uff09\n\n- data\uff1a \u8be5\u7528\u4f8b\u7684\u63a5\u53e3\u8bf7\u6c42\u53c2\u6570\n- caseid\uff1a\u6d4b\u8bd5\u7528\u4f8bid\uff0c\u5728\u6d4b\u8bd5\u7528\u4f8b\u4e0a\u4f20\u6d4b\u8bd5\u7528\u4f8b\u7ba1\u7406\u5e73\u53f0\u540e\u83b7\u5f97\uff08\u5f53\u524d\u4e3atestlink\u7ed9\u51fa\uff09\n- method\uff1a \u63a5\u53e3\u8bf7\u6c42\u65b9\u6cd5\n- url\uff1a \u63a5\u53e3\u7684endpoint\n- status_code\uff1a \u63a5\u53e3\u8fd4\u56de\u7684\u72b6\u6001\u7801\n- checkpoints \uff1a\u4e3a\u63a5\u53e3\u9884\u671f\u8fd4\u56de\u7ed3\u679c\u68c0\u67e5\u9879\u3002\u82e5\u4e3a\u5b57\u5178\uff0c\u4f1a\u5c06\u8be5\u5b57\u5178\u4e2d\u7684\u6bcf\u4e2akey\uff1avcalue\u53d6\u51fa\u4e0e\u8fd4\u56de\u7684body\u8fdb\u884c\u9010\u9879\u5bf9\u6bd4\uff0c\u82e5\u4e3a\u5217\u8868\u6216\u7a7a\uff0c\u4f1a\u8fdb\u884c\u5168\u7b49\u5bf9\u6bd4\n- validate\uff1a \u6807\u8bb0\u7ed3\u679c\u9a8c\u8bc1\u5668\u7684\u9a8c\u8bc1\u65b9\u5f0f\uff0c\u679a\u4e3e\u503c\u3002\u53ef\u586b0/1\n\n- parameterize : \u8be5\u6761\u7528\u4f8b\u662f\u5426\u9700\u8981\u8fdb\u884c\u53c2\u6570\u5316. \u503c\u4e3a`1`\u9700\u8981\u53c2\u6570\u5316,\u503c\u4e3a`0`\u4e0d\u9700\u8981\u53c2\u6570\u5316\n- result\uff1a\u6807\u8bb0\u7528\u4f8b\u6267\u884c\u7ed3\u679c\uff0c\u679a\u4e3e\uff0c\u53ef\u9009\u503c\uff1a\u6210\u529f/\u5931\u8d25/\u963b\u585e/\u672a\u6267\u884c\n\n#### \u5b9e\u4f8b\uff1a\n\n\u9700\u6d4b\u8bd5\u63a5\u53e3\u4fe1\u606f\uff1a\n\n```\nurl\uff1a/api/tests\n\nparameters:\n\t\"test_para_a\"\n\t\tdescription: \"the tests api's first para\"\n\t\trequired: true\n\t\ttype: string\n\n\t\"test_para_b\"\n\t\tdescription: \"the tests api's first para\"\n\t\trequired: true\n\t\ttype: int\n\nrespons:\n\t200:\n\t\t{\n \t\"status_code\": 200,\n \"content\": {\n \t\"para_a\":\"sys.cpu.nice\",\n \t\"para_b\":1531719554123\n }\n }\n\n\t422:\n\t\t{\n \t\"code\":\"422\",\n \t\"detail\":\n \t{\n \t\"test_para_a\":[\"Missing data for required field.\"],\n \t\"test_para_b\":[\"Missing data for required field.\"]\n \t},\n \t\"message\":\"\\u8bf7\\u6c42\\u6570\\u636e\\u6821\\u9a8c\\u5931\\u8d25\"\n \t}\n\t\t}\n\n```\n\n\n\n\u63a5\u53e3\u6d4b\u8bd5\u7528\u4f8b\u7f16\u5199\uff1a\n\n| \u6d4b\u8bd5\u7528\u4f8b\u756a\u53f7 | \u6d4b\u8bd5\u7528\u4f8b\u540d | level | \u9884\u7f6e\u6761\u4ef6 | \u6d4b\u8bd5\u5185\u5bb9 | \u9884\u671f\u7ed3\u679c | category | automated | caseid | method | url | data | status_code | checkpoints | validate | result | \u5173\u8054JIRA |\n| ------------ | ----------------------- | ----- | -------------- | ------------------------------------------------------------ | --------------------------------- | -------- | --------- | ------ | ------ | -------------------------------------------------------- | ------------------------------------------------------------ | ----------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------ | -------- |\n| Insert_001 | \u63d2\u5165\u63a5\u53e3\u7a7a\u53c2\u6570 | 1 | 1.\u63d2\u5165\u63a5\u53e3\u53ef\u7528 | 1.\u8c03\u7528\u6570\u636e\u63d2\u5165\u63a5\u53e3 2.\u63d2\u5165{ } | 1.\u63d2\u5165\u5931\u8d25 2.respones\u6d88\u606f\u63d0\u793a\u6b63\u786e | \u5f02\u5e38\u7cfb | 2 | 9033 | GET | [/api/tests/](http://192.168.20.47:8080/datanode/simple) | {} | 422 | { \"code\":\"422\", \"detail\": { \"test_para_a\":[\"Missing data for required field.\"], \"test_para_b\":[\"Missing data for required field.\"] }, \"message\":\"\\u8bf7\\u6c42\\u6570\\u636e\\u6821\\u9a8c\\u5931\\u8d25\" } | { \"code\": [\"==\"], \"detail\": [\"==\", \"len_2\"], \"message\": [\"==\"] } | | |\n| Insert_002 | \u6d4b\u8bd5value\u53c2\u6570\u7f3a\u5931\u63d2\u5165 | 1 | 1.\u63d2\u5165\u63a5\u53e3\u53ef\u7528 | 1.\u8c03\u7528\u6570\u636e\u63d2\u5165\u63a5\u53e3 2.\u63d2\u5165{\"metric\":\"cpu\", \"timestamp\":14785269422, tags:{\"tag1\":\"name1\" } } | 1.\u63d2\u5165\u5931\u8d25 2.respones\u6d88\u606f\u63d0\u793a\u6b63\u786e | \u5f02\u5e38\u7cfb | 2 | 9036 | GET | [/api/tests/](http://192.168.20.47:8080/datanode/simple) | { \"test_para_a\": \"sys.cpu.nice\" } | 422 | { \"code\":\"422\", \"detail\": { \"test_para_a\":[\"Missing data for required field.\"], \"test_para_b\":[\"Missing data for required field.\"] }, \"message\":\"\\u8bf7\\u6c42\\u6570\\u636e\\u6821\\u9a8c\\u5931\\u8d25\" } | { \"code\": [\"==\"], \"detail\": [\"in\", \"len_1\"], \"message\": [\"==\"] } | | |\n| Insert_003 | \u6d4b\u8bd5value\u4e3a\u503c\u4e3anull\u63d2\u5165 | 2 | 1.\u63d2\u5165\u63a5\u53e3\u53ef\u7528 | 1.\u8c03\u7528\u6570\u636e\u63d2\u5165\u63a5\u53e3 2.\u63d2\u5165{\"metric\":\"cpu\", \"timestamp\":14785269422, \"value\":null \"tags\":{\"tag1\":\"name2\" } } | 1.\u63d2\u5165\u5931\u8d25 2.respones\u6d88\u606f\u63d0\u793a\u6b63\u786e | \u5f02\u5e38\u7cfb | 2 | 9039 | GET | [/api/tests/](http://192.168.20.47:8080/datanode/simple) | { \"test_para_a\": \"sys.cpu.nice\", \"test_para_b\": 1531719554123 } | 200 | { \"para_a\":\"sys.cpu.nice\", \"para_b\":1531719554123 } | | | |\n\n\n\n### \u7f16\u5199\u6d4b\u8bd5\u4ee3\u7801\n\n\n\n```\n\n```\n\n\n\n\n\n### \u6267\u884c\u6d4b\u8bd5\n\n- \u51c6\u5907\u8fd0\u884c\u6d4b\u8bd5\u6240\u9700\u7684\u4f9d\u8d56\u73af\u5883\n- \u6267\u884c\u6d4b\u8bd5\n\n\n\n#### \u51c6\u5907\u8fd0\u884c\u73af\u5883\uff08\u53ea\u9700\u8981\u5728\u9996\u6b21\u8fd0\u884c\u65f6\u6267\u884c\uff09\n\n- \u6fc0\u6d3b\u865a\u62df\u73af\u5883\uff1a`pipenv shell`\uff0c\u82e5\u62a5\u9519\u5219\u6307\u5b9aPython\u89e3\u91ca\u5668\u7684\u8def\u5f84`pipenv shell --python /path/to/python`\u3002\n\n- \u5b89\u88c5\u4f9d\u8d56\u5305\uff1a`pipenv install`\n\n\n\n#### \u6267\u884c\u6d4b\u8bd5\n\n- \u65b9\u5f0f\u4e00\uff1a \u6267\u884c`rado run --test_case /test_case/UserManager ` \n\n- \u65b9\u5f0f\u4e8c\uff1a \n```\npy.test -vv --junitxml=Result/result_{datetime.now().time()}.xml --alluredir=Result/result_{datetime.now().time()}/\n```\n\n> \u4e0a\u8ff0\u4e24\u79cd\u6267\u884c\u65b9\u5f0f\u7b49\u4ef7\u3002\n\n- `--junitxml=Result/result_{datetime.now().time()}.xml` \u5c06junitxml\u683c\u5f0f\u7684\u6d4b\u8bd5\u7ed3\u679c\u6587\u4ef6\u4fdd\u5b58\u5728Result\u76ee\u5f55\u4e0b\u7684result_\u5f53\u524d\u65f6\u95f4.xml\n- `alluredir=Result/result_{datetime.now().time()}/` \u5c06Allure\u6240\u9700\u7684\u7ed3\u679c\u6570\u636e\u6587\u4ef6\u4fdd\u5b58\u5728Result\u76ee\u5f55\u4e0b\u7684result_\u5f53\u524d\u65f6\u95f4\u70b9/\u76ee\u5f55\u4e0b\u3002\n\n\u5b9e\u4f8b:\n\n```\n\n```\n\n\n\n\n\n### \u751f\u6210\u62a5\u544a\n\n> \u8be5\u90e8\u5206\u8fd8\u5b58\u5728\u95ee\u9898\uff0c\u53c2\u6570\u5316\u4e4b\u540e\u7684\u62a5\u544a\u5c55\u793a\u7ed3\u679c\u4e0d\u7b26\u5408\u9884\u671f\u7ed3\u679c\u3002\n\n```\ndocker-compose up -d allure\n```\n\n\u4e0a\u8ff0\u547d\u4ee4\u6267\u884c\u6210\u529f\u540e\uff0c\u672c\u5730\u6d4f\u89c8\u5668\u8bbf\u95ee`http://127.0.0.1:4040`\n\n\n\n\n\n## validate\n\n- \u9a8c\u8bc1\u539f\u7406\n- \u9a8c\u8bc1\u65b9\u5f0f\n- \u5b9e\u4f8b\n\n### \u9a8c\u8bc1\u539f\u7406\n\n```\n# \u5168\u7b49\u9a8c\u8bc1\uff08validate\u4e0d\u586b\u5199\uff09\n# \u63a5\u53e3\u5b9e\u9645\u8fd4\u56de\u503cresp_body:\n{\n\t\"code\":\"422\",\n \"detail\":\n {\n \t\"test_para_a\":[\"Missing data for required field.\"],\n \"test_para_b\":[\"Missing data for required field.\"]\n },\n \"message\":\"\\u8bf7\\u6c42\\u6570\\u636e\\u6821\\u9a8c\\u5931\\u8d25\"\n}\n\n# checkpoints:\n{\n\t\"code\":\"422\",\n \t\"detail\":\n \t{\n \t\"test_para_a\":[\"Missing data for required field.\"],\n \t\"test_para_b\":[\"Missing data for required field.\"]\n \t},\n \t\"message\":\"\\u8bf7\\u6c42\\u6570\\u636e\\u6821\\u9a8c\\u5931\\u8d25\"\n}\n\n```\n\n\n```\n# \u90e8\u5206\u9a8c\u8bc1\uff08validate=0\uff09\n# \u63a5\u53e3\u5b9e\u9645\u8fd4\u56de\u503cresp_body:\n{\n\t\"code\":\"422\",\n \"detail\":\n {\n \t\"test_para_a\":[\"Missing data for required field.\"],\n \"test_para_b\":[\"Missing data for required field.\"]\n },\n \"message\":\"\\u8bf7\\u6c42\\u6570\\u636e\\u6821\\u9a8c\\u5931\\u8d25\"\n}\n\n# checkpoints:\n{\n\t\"code\":\"422\",\n \t\"test_para_a\":[\"Missing data for required field.\"],\n \t\"test_para_b\":[\"Missing data for required field.\"]\n}\n\n```\n\n\n\n\n### \u9a8c\u8bc1\u65b9\u5f0f\n\n- \u5168\u7b49\u9a8c\u8bc1\n- \u90e8\u5206\u9a8c\u8bc1\n\n\n\n#### \u5168\u7b49\u9a8c\u8bc1\n\n\n\n- checkpoints \u4e0e resp_body \u505a\u6574\u4f53\u5168\u7b49\u9a8c\u8bc1\n\n \u5f53validate \u5217\u7684\u503c\u4e3a\u201c1\u201d\u65f6, \u5bf9\u6574\u4f53\u8fdb\u884c\u5168\u7b49\u9a8c\u8bc1\n\n > assert \u8bed\u53e5\u4e3a: `assert resp_body == checkpoints`\n\n\n\n\n\n\n#### \u90e8\u5206\u9a8c\u8bc1\n\n`validate= 0`, \u9a8c\u8bc1resp_body \u4e2d\u7684\u67d0\u4e2akey \u7684value\u662f\u5426\u5305\u542b\u5728checkpoints\u5bf9\u5e94key\u7684value\u4e2d.\n\n> step1\uff1a\u5148\u53d6\u5230 \u9700\u8981\u9a8c\u8bc1\u7684 key\uff0c\u5373checkpoints.keys()\n>\n> step2\uff1a\u5728resp_body \u5bf9\u83b7\u53d6key\u7684value\u503c\u5982\u4e0b\uff0c$..key\u83b7\u53d6resp_body \u6240\u6709key\u7684\u503c\n>\n> `resp_data = jsonpath(\"resp_body\", \"$..key\")`\n>\n> step3\uff1a\u5bf9\u4e8e\u552f\u4e00key\uff0c\u53bb\u5168\u7b49\u9a8c\u8bc1\uff0c\u5bf9\u4e8e\u5b58\u5728\u91cd\u590dkey \uff0c\u9002\u7528\u4e8e\"==\"\u6216\u8005\"in\"\uff0c\u5982\u4e0b\u4f8b\u4e2did\u586b\u5199\u4e00\u4e2a\u4e5f\u53ef\u4ee5\n\n\n```\n\u90e8\u5206\u9a8c\u8bc1\uff0c\u5728 \u8fd4\u56de\u7684response\u4e2d\u5e26\u6709 \u968f\u673aid \u7684\u573a\u666f\u5c31\u6bd4\u8f83\u65b9\u4fbf\uff0c\u6216\u8005\u8fd4\u56de\u4e2dresponse\u5185\u5bb9\u6bd4\u8f83\u591a\n\u800c\u6211\u4eec\u9700\u8981\u53bb check\u4e00\u4e9b\u6bd4\u8f83\u91cd\u8981\u7684\u5b57\u6bb5\u3002\n\n\u90e8\u5206\u9a8c\u8bc1\uff0c\u5bf9\u4e8e\u8fd4\u56de\u7684response \u6709\u591a\u4e2a\u91cd\u590d \u5b57\u6bb5\u7684\uff0c \u7528\u5217\u8868\u5904\u7406\uff0c\u5982 \n# \u63a5\u53e3\u5b9e\u9645\u8fd4\u56de\u503cresp_body:\n{\n\t\"code\":\"200\",\n \"data\":[{\n \"id\":\"123456\"\n },\n {\n \"id\":\"654321\"\n }\n ]\n}\n# checkpoints:\n{\n\t\"code\":\"200\",\n \t\"id\":[\"123456\",\"654321\"] # \u201d==\u201c\n}\n{\n\t\"code\":\"200\",\n \t\"id\":[\"123456\"] # \u201din\u201c\n}\n\n```\n\n\n\n\n\n## \u67b6\u6784\n\n\u6682\u65e0\u3002\n\n\n\n\n\n## RoadMap\n\n### 1.0.0\n\n| \u8bfb\u53d6excel\u4e2d\u6d4b\u8bd5\u7528\u4f8b |\n| ------------------------------------------------------------ |\n| \u8bfb\u53d6excel\u4e2d\u6d4b\u8bd5\u7528\u4f8b\u6570\u636e\u901a\u8fc7\u63d0\u524d\u5b9a\u4e49\u7684\u6a21\u677f\u81ea\u52a8\u751f\u6210 |\n| \u624b\u52a8\u7f16\u5199\u6d4b\u8bd5\u7528\u4f8b\u4ee3\u7801\uff08\u9700\u8981\u7b26\u5408PyTest\u89c4\u8303\uff09 |\n| \u652f\u6301HTTP\u534f\u8bae\u7684\u4e0d\u540c\u65b9\u5f0f\u8bf7\u6c42\uff0c\u5982GET\u3001POST\u3001PUT\u3001DELETE\u3001PATCH\u7b49\u8bf7\u6c42\u65b9\u5f0f\u3002 |\n| HTTP\u8bf7\u6c42\u652f\u6301URL\u8bf7\u6c42\u53c2\u6570\u53caBODY\u8bf7\u6c42\u53c2\u6570 |\n| HTTP\u8bf7\u6c42\u652f\u6301JSON\u683c\u5f0f\u7684\u8bf7\u6c42 |\n| \u4ec5\u9a8c\u8bc1status_code |\n| \u9a8c\u8bc1status_code + response_body\u7684\u6574\u4f53\u9a8c\u8bc1 |\n| \u9a8c\u8bc1status_code + response_body\u6307\u5b9a\u5b57\u6bb5\u7684\u9a8c\u8bc1\uff08\u4f7f\u7528\u9ed8\u8ba4\u5b57\u6bb5\u67e5\u627e\u8def\u5f84\uff09 |\n| == \u9a8c\u8bc1 |\n| \u7528\u4f8b\u6267\u884clog |\n| \u63d0\u4f9b\u9879\u76ee\u811a\u624b\u67b6\uff0c\u80fd\u591f\u901a\u8fc7cli\u7b49\u65b9\u5f0f\u81ea\u52a8\u751f\u6210\u901a\u7528\u6027\u8f83\u9ad8\u7684\u6d4b\u8bd5\u9879\u76ee\u7ed3\u6784 |\n| \u6258\u7ba1\u81f3PyPI\uff0c\u6587\u6863\u6258\u7ba1\u81f3readthedocs |\n\n\n\n### 1.1.0\n\n| \u8bfb\u53d6\u6d4b\u8bd5\u7ba1\u7406\u5e73\u53f0\u6570\u636e\u5e93\u4e2d\u6d4b\u8bd5\u7528\u4f8b |\n| ------------------------------------------------------------ |\n| \u8bfb\u53d6\u6d4b\u8bd5\u7ba1\u7406\u5e73\u53f0\u6570\u636e\u5e93\u4e2d\u6d4b\u8bd5\u7528\u4f8b\u6570\u636e\u901a\u8fc7\u63d0\u524d\u5b9a\u4e49\u7684\u6a21\u677f\u81ea\u52a8\u751f\u6210 |\n| \u9a8c\u8bc1status_code + response_body\u6307\u5b9a\u5b57\u6bb5\u7684\u9a8c\u8bc1\uff08\u5728validator\u4e2d\u7ed9\u5b9a\u5b57\u6bb5\u67e5\u627e\u8def\u5f84\uff09 |\n| \u7528\u4f8b\u6267\u884c\u7ed3\u679c\u6570\u636e\u5e93\u8bb0\u5f55 |\n| \u901a\u8fc7\u914d\u7f6e\u6587\u4ef6\u8fdb\u884c\u6d4b\u8bd5\u914d\u7f6e\u7ba1\u7406 |\n\n\n\n\n\n## \u8be6\u7ec6\u8bbe\u8ba1\n\n\n\n### \u529f\u80fd\u8be6\u7ec6\u8bbe\u8ba1\n\n(\u6682\u65e0)\n\n\n\n### \u63a5\u53e3\u8be6\u7ec6\u8bbe\u8ba1\n\n(\u6682\u65e0)\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/TheoTT/my_doc", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "Rado", "package_url": "https://pypi.org/project/Rado/", "platform": "", "project_url": "https://pypi.org/project/Rado/", "project_urls": { "Homepage": "https://github.com/TheoTT/my_doc" }, "release_url": "https://pypi.org/project/Rado/0.0.2/", "requires_dist": [ "allure-pytest (==2.6.5)", "Click (==7.0)", "colorama (==0.4.1)", "colorlog (==4.0.2)", "datatest (==0.9.6)", "jsonpath (==0.81)", "paramiko (==2.5.0)", "xlrd (==1.2.0)", "requests (==2.22.0)" ], "requires_python": "", "summary": "The InterFace Test Framework based on PyTest, Request and Allure", "version": "0.0.2" }, "last_serial": 5409326, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "ab6d940e7ca44cd3cf15b48d3bd80e62", "sha256": "9b6f3af60ed4638b534f4708b98861beca54b0915ff6d9b694971177ad0cf244" }, "downloads": -1, "filename": "Rado-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "ab6d940e7ca44cd3cf15b48d3bd80e62", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13059, "upload_time": "2019-06-13T11:27:17", "url": "https://files.pythonhosted.org/packages/16/23/d9bfaa7afd5efa812cf34b07e84cc525e28c5f445b2705387d9000f08b93/Rado-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e353f29e6bf0d64357f12fa94e0deb2e", "sha256": "082c82af2e73043a2141b31608f9c5b6f67d0a1531070915e8ad25fc6ea5faf5" }, "downloads": -1, "filename": "Rado-0.0.1.tar.gz", "has_sig": false, "md5_digest": "e353f29e6bf0d64357f12fa94e0deb2e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8646, "upload_time": "2019-06-13T11:27:20", "url": "https://files.pythonhosted.org/packages/2a/0f/786c95a6cc5505165a48f7f2d1109244742651f9d8d7f639b60015b927bf/Rado-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "b3304bb1fab49f1416fbc32100766351", "sha256": "c93e420e000d1d564c5e56b94d1a91d1eab401f82a562407a7a6a96eb944bdd1" }, "downloads": -1, "filename": "Rado-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b3304bb1fab49f1416fbc32100766351", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17400, "upload_time": "2019-06-17T09:31:21", "url": "https://files.pythonhosted.org/packages/c6/b9/97b31c851f6d48c09a5f7e97a4a6afbe61e9133e469a3e0f87360d335502/Rado-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7a953bb51c924dd4c2e96111fbb9bee6", "sha256": "2cf6b42b8f8951eab995da640dad27e71c04719a0a118e71433d28a812a8d929" }, "downloads": -1, "filename": "Rado-0.0.2.tar.gz", "has_sig": false, "md5_digest": "7a953bb51c924dd4c2e96111fbb9bee6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16152, "upload_time": "2019-06-17T09:31:23", "url": "https://files.pythonhosted.org/packages/70/d5/5d444aa91a9e59f25d38c7a2fc7bfc0158e1d834a0041ac732506d80c17e/Rado-0.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b3304bb1fab49f1416fbc32100766351", "sha256": "c93e420e000d1d564c5e56b94d1a91d1eab401f82a562407a7a6a96eb944bdd1" }, "downloads": -1, "filename": "Rado-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b3304bb1fab49f1416fbc32100766351", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17400, "upload_time": "2019-06-17T09:31:21", "url": "https://files.pythonhosted.org/packages/c6/b9/97b31c851f6d48c09a5f7e97a4a6afbe61e9133e469a3e0f87360d335502/Rado-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7a953bb51c924dd4c2e96111fbb9bee6", "sha256": "2cf6b42b8f8951eab995da640dad27e71c04719a0a118e71433d28a812a8d929" }, "downloads": -1, "filename": "Rado-0.0.2.tar.gz", "has_sig": false, "md5_digest": "7a953bb51c924dd4c2e96111fbb9bee6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16152, "upload_time": "2019-06-17T09:31:23", "url": "https://files.pythonhosted.org/packages/70/d5/5d444aa91a9e59f25d38c7a2fc7bfc0158e1d834a0041ac732506d80c17e/Rado-0.0.2.tar.gz" } ] }