{"id":44,"date":"2026-02-26T10:00:00","date_gmt":"2026-02-26T02:00:00","guid":{"rendered":"http:\/\/localhost:8888\/?p=44"},"modified":"2026-07-09T16:17:45","modified_gmt":"2026-07-09T08:17:45","slug":"%e6%95%b0%e6%8d%ae%e9%a9%b1%e5%8a%a8%e6%b5%8b%e8%af%95%e5%ae%9e%e6%88%98","status":"publish","type":"post","link":"https:\/\/blog.runnergo.cn\/?p=44","title":{"rendered":"\u6570\u636e\u9a71\u52a8\u6d4b\u8bd5\u5b9e\u6218 &#8211; Excel\u3001YAML\u3001JSON\u591a\u6e90\u6570\u636e\u7ba1\u7406"},"content":{"rendered":"<h1>\u6570\u636e\u9a71\u52a8\u6d4b\u8bd5\u5b9e\u6218 &#8211; Excel\u3001YAML\u3001JSON\u591a\u6e90\u6570\u636e\u7ba1\u7406<\/h1>\n<p>&gt; \u4f5c\u8005\uff1a\u6570\u636e\u6d4b\u8bd5\u5458<br \/>\n&#8212;<\/p>\n<h2>\u524d\u8a00<\/h2>\n<p>\u5927\u5bb6\u597d\uff0c\u6211\u662f\u6570\u636e\u6d4b\u8bd5\u5458\u3002\u505a\u6570\u636e\u6d4b\u8bd53\u5e74\uff0c\u6570\u636e\u9a71\u52a8\u662f\u63d0\u9ad8\u6d4b\u8bd5\u8986\u76d6\u7387\u7684\u5173\u952e\u65b9\u6cd5\u3002\u4eca\u5929\u5206\u4eab\u591a\u6570\u636e\u6e90\u9a71\u52a8\u7684\u5b9e\u6218\u6280\u5de7\u3002<\/p>\n<p>&#8212;<\/p>\n<h2>\u4e00\u3001\u6570\u636e\u9a71\u52a8\u6982\u5ff5<\/h2>\n<h3>\u4ec0\u4e48\u662f\u6570\u636e\u9a71\u52a8\uff1f<\/h3>\n<p>\u5c06\u6d4b\u8bd5\u903b\u8f91\u4e0e\u6d4b\u8bd5\u6570\u636e\u5206\u79bb\uff1a<\/p>\n<ul>\n<li>\u540c\u4e00\u5957\u6d4b\u8bd5\u4ee3\u7801<\/li>\n<li>\u591a\u7ec4\u6d4b\u8bd5\u6570\u636e<\/li>\n<li>\u53c2\u6570\u5316\u6267\u884c<\/li>\n<\/ul>\n<p>&#8212;<\/p>\n<h2>\u4e8c\u3001Excel\u6570\u636e\u9a71\u52a8<\/h2>\n<h3>Excel\u6570\u636e\u683c\u5f0f<\/h3>\n<p><code>`<\/code><br \/>\n| \u7528\u6237\u540d | \u5bc6\u7801 | \u9884\u671f\u72b6\u6001 |<br \/>\n|&#8212;&#8212;&#8211;|&#8212;&#8212;|&#8212;&#8212;&#8212;-|<br \/>\n| test1 | pass1 | success |<br \/>\n| test2 | wrong | failure |<br \/>\n| empty | pass | error |<br \/>\n<code>`<\/code><\/p>\n<h3>Python\u8bfb\u53d6Excel<\/h3>\n<p><code>`<\/code>python<br \/>\nimport pandas as pd<\/p>\n<p>def load_excel_data():<br \/>\n    df = pd.read_excel(&#8220;test_data.xlsx&#8221;)<br \/>\n    return df.to_dict(&#8220;records&#8221;)<\/p>\n<p>@pytest.mark.parametrize(&#8220;data&#8221;, load_excel_data())<br \/>\ndef test_login(data):<br \/>\n    result = login(data[&#8220;\u7528\u6237\u540d&#8221;], data[&#8220;\u5bc6\u7801&#8221;])<br \/>\n    assert result.status == data[&#8220;\u9884\u671f\u72b6\u6001&#8221;]<br \/>\n<code>`<\/code><\/p>\n<p>&#8212;<\/p>\n<h2>\u4e09\u3001YAML\u6570\u636e\u9a71\u52a8<\/h2>\n<h3>YAML\u6570\u636e\u683c\u5f0f<\/h3>\n<p><code>`<\/code>yaml<br \/>\ntest_cases:<br \/>\n  &#8211; name: \u6b63\u5e38\u767b\u5f55<br \/>\n    username: testuser<br \/>\n    password: password123<br \/>\n    expected: success<\/p>\n<p>  &#8211; name: \u9519\u8bef\u5bc6\u7801<br \/>\n    username: testuser<br \/>\n    password: wrongpass<br \/>\n    expected: failure<br \/>\n<code>`<\/code><\/p>\n<p>&#8212;<\/p>\n<h2>\u56db\u3001JSON\u6570\u636e\u9a71\u52a8<\/h2>\n<h3>JSON\u6570\u636e\u683c\u5f0f<\/h3>\n<p><code>`<\/code>json<br \/>\n[<br \/>\n    {&#8220;username&#8221;: &#8220;user1&#8221;, &#8220;password&#8221;: &#8220;pass1&#8221;, &#8220;expected&#8221;: &#8220;success&#8221;},<br \/>\n    {&#8220;username&#8221;: &#8220;user2&#8221;, &#8220;password&#8221;: &#8220;pass2&#8221;, &#8220;expected&#8221;: &#8220;success&#8221;}<br \/>\n]<br \/>\n<code>`<\/code><\/p>\n<p>&#8212;<\/p>\n<h2>\u4e94\u3001RunnerGo\u6570\u636e\u9a71\u52a8<\/h2>\n<p>RunnerGo\u652f\u6301CSV\/JSON\u6570\u636e\u6587\u4ef6\u5bfc\u5165\uff1a<\/p>\n<ul>\n<li>\u914d\u7f6e\u6570\u636e\u6587\u4ef6<\/li>\n<li>\u5f15\u7528\u6570\u636e\u53d8\u91cf<\/li>\n<li>\u81ea\u52a8\u8fed\u4ee3\u6267\u884c<\/li>\n<\/ul>\n<p>&#8212;<\/p>\n<h2>\u603b\u7ed3<\/h2>\n<p>\u6570\u636e\u9a71\u52a8\u8981\u70b9\uff1a<\/p>\n<p>| \u6570\u636e\u6e90 | \u4f18\u70b9 | \u9002\u7528\u573a\u666f |<br \/>\n|&#8212;&#8212;&#8211;|&#8212;&#8212;|&#8212;&#8212;&#8212;-|<br \/>\n| Excel | \u53ef\u89c6\u5316\u7f16\u8f91 | \u4e1a\u52a1\u6570\u636e |<br \/>\n| YAML | \u5c42\u6b21\u6e05\u6670 | \u914d\u7f6e\u6570\u636e |<br \/>\n| JSON | \u6807\u51c6\u683c\u5f0f | API\u6570\u636e |<\/p>\n<p>&#8212;<\/p>\n<p><strong>\u4e0b\u671f\u9884\u544a\uff1aGitLab CI\u6d4b\u8bd5\u96c6\u6210\u5b9e\u6218 &#8211; \u4ece\u4ee3\u7801\u63d0\u4ea4\u5230\u6d4b\u8bd5\u62a5\u544a\u5168\u6d41\u7a0b<\/strong><\/p>\n<p>&gt; \u4f5c\u8005\uff1a\u6570\u636e\u6d4b\u8bd5\u5458\uff0c3\u5e74\u6570\u636e\u6d4b\u8bd5\u7ecf\u9a8c<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6570\u636e\u9a71\u52a8\u6d4b\u8bd5\u5b9e\u6218 &#8211; Excel\u3001YAML\u3001JSON\u591a\u6e90\u6570\u636e\u7ba1\u7406 &gt; \u4f5c\u8005\uff1a\u6570\u636e\u6d4b\u8bd5\u5458 &#8212; \u524d\u8a00 \u5927\u5bb6\u597d\uff0c\u6211\u662f\u6570\u636e\u6d4b\u8bd5\u5458\u3002\u505a\u6570\u636e\u6d4b\u8bd53\u5e74\uff0c\u6570\u636e\u9a71\u52a8\u662f\u63d0\u9ad8\u6d4b\u8bd5\u8986\u76d6\u7387\u7684\u5173\u952e\u65b9&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-44","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.runnergo.cn\/index.php?rest_route=\/wp\/v2\/posts\/44","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.runnergo.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.runnergo.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.runnergo.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.runnergo.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=44"}],"version-history":[{"count":0,"href":"https:\/\/blog.runnergo.cn\/index.php?rest_route=\/wp\/v2\/posts\/44\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.runnergo.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=44"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.runnergo.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=44"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.runnergo.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=44"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}