Deployed e5fdf96 with MkDocs version: 1.0.4

This commit is contained in:
debugtalk
2019-11-01 23:17:45 +08:00
commit 9185128d87
136 changed files with 26949 additions and 0 deletions
+963
View File
@@ -0,0 +1,963 @@
<!doctype html>
<html lang="zh" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="description" content="HttpRunner V2.x User Documentation">
<meta name="author" content="debugtalk">
<meta name="lang:clipboard.copy" content="复制">
<meta name="lang:clipboard.copied" content="已复制">
<meta name="lang:search.language" content="jp">
<meta name="lang:search.pipeline.stopwords" content="True">
<meta name="lang:search.pipeline.trimmer" content="True">
<meta name="lang:search.result.none" content="没有找到符合条件的结果">
<meta name="lang:search.result.one" content="找到 1 个符合条件的结果">
<meta name="lang:search.result.other" content="# 个符合条件的结果">
<meta name="lang:search.tokenizer" content="[\uff0c\u3002]+">
<link rel="shortcut icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.4.3">
<title>环境变量 - HttpRunner V2.x 中文使用文档</title>
<link rel="stylesheet" href="../../assets/stylesheets/application.30686662.css">
<link rel="stylesheet" href="../../assets/stylesheets/application-palette.a8b3c06d.css">
<meta name="theme-color" content="#3f51b5">
<script src="../../assets/javascripts/modernizr.74668098.js"></script>
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono&display=fallback">
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
<link rel="stylesheet" href="../../assets/fonts/material-icons.css">
<script>
window.ga = window.ga || function() {
(ga.q = ga.q || []).push(arguments)
}
ga.l = +new Date
/* Setup integration and send page view */
ga("create", "UA-114587036-2", "auto")
ga("set", "anonymizeIp", true)
ga("send", "pageview")
/* Register handler to log search on blur */
document.addEventListener("DOMContentLoaded", () => {
if (document.forms.search) {
var query = document.forms.search.query
query.addEventListener("blur", function() {
if (this.value) {
var path = document.location.pathname;
ga("send", "pageview", path + "?q=" + this.value)
}
})
}
})
</script>
<script async src="https://www.google-analytics.com/analytics.js"></script>
</head>
<body dir="ltr" data-md-color-primary="indigo" data-md-color-accent="indigo">
<svg class="md-svg">
<defs>
<svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
</defs>
</svg>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
<a href="#_1" tabindex="1" class="md-skip">
跳转至
</a>
<header class="md-header" data-md-component="header">
<nav class="md-header-nav md-grid">
<div class="md-flex">
<div class="md-flex__cell md-flex__cell--shrink">
<a href="../.." title="HttpRunner V2.x 中文使用文档" class="md-header-nav__button md-logo">
<i class="md-icon"></i>
</a>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
</div>
<div class="md-flex__cell md-flex__cell--stretch">
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
<span class="md-header-nav__topic">
HttpRunner V2.x 中文使用文档
</span>
<span class="md-header-nav__topic">
环境变量
</span>
</div>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" placeholder="搜索" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
<label class="md-icon md-search__icon" for="__search"></label>
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
&#xE5CD;
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="result">
<div class="md-search-result__meta">
键入以开始搜索
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<div class="md-header-nav__source">
<a href="https://github.com/HttpRunner/HttpRunner" title="前往 Github 仓库" class="md-source" data-md-source="github">
<div class="md-source__icon">
<svg viewBox="0 0 24 24" width="24" height="24">
<use xlink:href="#__github" width="24" height="24"></use>
</svg>
</div>
<div class="md-source__repository">
HttpRunner
</div>
</a>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container">
<main class="md-main" role="main">
<div class="md-main__inner md-grid" data-md-component="container">
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" data-md-level="0">
<label class="md-nav__title md-nav__title--site" for="__drawer">
<a href="../.." title="HttpRunner V2.x 中文使用文档" class="md-nav__button md-logo">
<i class="md-icon"></i>
</a>
HttpRunner V2.x 中文使用文档
</label>
<div class="md-nav__source">
<a href="https://github.com/HttpRunner/HttpRunner" title="前往 Github 仓库" class="md-source" data-md-source="github">
<div class="md-source__icon">
<svg viewBox="0 0 24 24" width="24" height="24">
<use xlink:href="#__github" width="24" height="24"></use>
</svg>
</div>
<div class="md-source__repository">
HttpRunner
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." title="介绍" class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item">
<a href="../../Installation/" title="安装说明" class="md-nav__link">
安装说明
</a>
</li>
<li class="md-nav__item">
<a href="../../quickstart/" title="快速上手" class="md-nav__link">
快速上手
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
<label class="md-nav__link" for="nav-4">
基础概念
</label>
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
<label class="md-nav__title" for="nav-4">
基础概念
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../concept/nominal/" title="名词解释" class="md-nav__link">
名词解释
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5" checked>
<label class="md-nav__link" for="nav-5">
测试准备
</label>
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
<label class="md-nav__title" for="nav-5">
测试准备
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../record/" title="录制生成用例" class="md-nav__link">
录制生成用例
</a>
</li>
<li class="md-nav__item">
<a href="../project-structure/" title="项目文件组织" class="md-nav__link">
项目文件组织
</a>
</li>
<li class="md-nav__item">
<a href="../testcase-structure/" title="测试用例组织" class="md-nav__link">
测试用例组织
</a>
</li>
<li class="md-nav__item">
<a href="../request-hook/" title="hook机制" class="md-nav__link">
hook机制
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
环境变量
</label>
<a href="./" title="环境变量" class="md-nav__link md-nav__link--active">
环境变量
</a>
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="__toc">目录</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
环境变量的作用
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
设置环境变量
</a>
<nav class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
在终端中预设环境变量
</a>
</li>
<li class="md-nav__item">
<a href="#env" class="md-nav__link">
通过 .env 文件设置环境变量
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_4" class="md-nav__link">
引用环境变量
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../testcase-layer/" title="测试用例分层" class="md-nav__link">
测试用例分层
</a>
</li>
<li class="md-nav__item">
<a href="../parameters/" title="参数化数据驱动" class="md-nav__link">
参数化数据驱动
</a>
</li>
<li class="md-nav__item">
<a href="../validate-pretty/" title="Validate & Prettify" class="md-nav__link">
Validate & Prettify
</a>
</li>
<li class="md-nav__item">
<a href="../security/" title="信息安全" class="md-nav__link">
信息安全
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
<label class="md-nav__link" for="nav-6">
测试执行
</label>
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
<label class="md-nav__title" for="nav-6">
测试执行
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../run-tests/cli/" title="运行测试(CLI)" class="md-nav__link">
运行测试(CLI)
</a>
</li>
<li class="md-nav__item">
<a href="../../run-tests/report/" title="测试报告" class="md-nav__link">
测试报告
</a>
</li>
<li class="md-nav__item">
<a href="../../run-tests/load-test/" title="性能测试" class="md-nav__link">
性能测试
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
<label class="md-nav__link" for="nav-7">
开发扩展
</label>
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
<label class="md-nav__title" for="nav-7">
开发扩展
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../development/architecture/" title="Pipline" class="md-nav__link">
Pipline
</a>
</li>
<li class="md-nav__item">
<a href="../../development/dev-api/" title="基础库调用" class="md-nav__link">
基础库调用
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../FAQ/" title="FAQ" class="md-nav__link">
FAQ
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
<label class="md-nav__link" for="nav-9">
实践案例
</label>
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
<label class="md-nav__title" for="nav-9">
实践案例
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../examples/testerhome-login/" title="TesterHome 登录" class="md-nav__link">
TesterHome 登录
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../related-docs/" title="相关资料" class="md-nav__link">
相关资料
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="__toc">目录</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
环境变量的作用
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
设置环境变量
</a>
<nav class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
在终端中预设环境变量
</a>
</li>
<li class="md-nav__item">
<a href="#env" class="md-nav__link">
通过 .env 文件设置环境变量
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_4" class="md-nav__link">
引用环境变量
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<h1>环境变量</h1>
<h2 id="_1">环境变量的作用<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<p>在自动化测试中,有时需要借助环境变量实现某些特定的目的,常见的场景包括:</p>
<ul>
<li>切换测试环境</li>
<li>切换测试配置</li>
<li>存储敏感数据(从<a href="/prepare/security/">信息安全</a>的角度出发)</li>
</ul>
<h2 id="_2">设置环境变量<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h2>
<h3 id="_3">在终端中预设环境变量<a class="headerlink" href="#_3" title="Permanent link">&para;</a></h3>
<p>使用环境变量之前,需要先在系统中设置环境变量名称和值,传统的方式为使用 export 命令(Windows系统中使用 set 命令):</p>
<div class="codehilite"><pre><span></span>$ <span class="nb">export</span> <span class="nv">UserName</span><span class="o">=</span>admin
$ <span class="nb">echo</span> <span class="nv">$UserName</span>
admin
$ <span class="nb">export</span> <span class="nv">Password</span><span class="o">=</span><span class="m">123456</span>
$ <span class="nb">echo</span> <span class="nv">$Password</span>
<span class="m">123456</span>
</pre></div>
<p>然后,在程序中就可以对系统中的环境变量进行读取。</p>
<div class="codehilite"><pre><span></span>$ python
&gt;&gt;&gt; import os
&gt;&gt;&gt; os.environ<span class="o">[</span><span class="s2">&quot;UserName&quot;</span><span class="o">]</span>
<span class="s1">&#39;admin&#39;</span>
</pre></div>
<h3 id="env">通过 .env 文件设置环境变量<a class="headerlink" href="#env" title="Permanent link">&para;</a></h3>
<p>除了这种方式,HttpRunner 还借鉴了 pipenv <a href="https://docs.pipenv.org/advanced/#automatic-loading-of-env">加载 <code>.env</code> 的方式</a></p>
<p>默认情况下,在自动化测试项目的根目录中,创建 <code>.env</code> 文件,并将敏感数据信息放置到其中,存储采用 <code>name=value</code> 的格式:</p>
<div class="codehilite"><pre><span></span>$ cat .env
<span class="nv">UserName</span><span class="o">=</span>admin
<span class="nv">Password</span><span class="o">=</span><span class="m">123456</span>
<span class="nv">PROJECT_KEY</span><span class="o">=</span>ABCDEFGH
</pre></div>
<p>同时,<code>.env</code> 文件不应该添加到代码仓库中,建议将 <code>.env</code> 加入到 <code>.gitignore</code> 中。</p>
<p>HttpRunner 运行时,会自动将 <code>.env</code> 文件中的内容加载到运行时(RunTime)的环境变量中,然后在运行时中就可以对环境变量进行读取了。</p>
<p>若需加载不位于自动化项目根目录中的 <code>.env</code>,或者其它名称的 <code>.env</code> 文件(例如 <code>production.env</code>),可以采用 <code>--dot-env-path</code> 参数指定文件路径:</p>
<div class="codehilite"><pre><span></span>$ hrun /path/to/testcase.yml --dot-env-path /path/to/.env --log-level debug
INFO Loading environment variables from /path/to/.env
DEBUG Loaded variable: UserName
DEBUG Loaded variable: Password
DEBUG Loaded variable: PROJECT_KEY
...
</pre></div>
<h2 id="_4">引用环境变量<a class="headerlink" href="#_4" title="Permanent link">&para;</a></h2>
<p>在 HttpRunner 中内置了函数 <code>environ</code>(简称 <code>ENV</code>),可用于在 YAML/JSON 脚本中直接引用环境变量。</p>
<div class="codehilite"><pre><span></span><span class="p p-Indicator">-</span> <span class="nt">test</span><span class="p">:</span>
<span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">login</span>
<span class="nt">request</span><span class="p">:</span>
<span class="nt">url</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">http://host/api/login</span>
<span class="nt">method</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">POST</span>
<span class="nt">headers</span><span class="p">:</span>
<span class="nt">Content-Type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">application/json</span>
<span class="nt">json</span><span class="p">:</span>
<span class="nt">username</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">${ENV(UserName)}</span>
<span class="nt">password</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">${ENV(Password)}</span>
<span class="nt">validate</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="nt">eq</span><span class="p">:</span> <span class="p p-Indicator">[</span><span class="nv">status_code</span><span class="p p-Indicator">,</span> <span class="nv">200</span><span class="p p-Indicator">]</span>
</pre></div>
<p>若还需对读取的环境变量做进一步处理,则可以在 <code>debugtalk.py</code> 通过 Python 内置的函数 <code>os.environ</code> 对环境变量进行引用,然后再实现处理逻辑。</p>
<p>例如,若发起请求的密码需要先与密钥进行拼接并生成 MD5,那么就可以在 <code>debugtalk.py</code> 文件中实现如下函数:</p>
<div class="codehilite"><pre><span></span><span class="kn">import</span> <span class="nn">os</span>
<span class="k">def</span> <span class="nf">get_encrypt_password</span><span class="p">():</span>
<span class="n">raw_passwd</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s2">&quot;Password&quot;</span><span class="p">]</span>
<span class="n">PROJECT_KEY</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s2">&quot;PROJECT_KEY&quot;</span><span class="p">])</span>
<span class="n">password</span> <span class="o">=</span> <span class="p">(</span><span class="n">raw_passwd</span> <span class="o">+</span> <span class="n">PROJECT_KEY</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;ascii&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">hmac</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">password</span><span class="p">,</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">sha1</span><span class="p">)</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
</pre></div>
<p>然后,在 YAML/JSON 格式的测试用例中,就可以通过<code>${func()}</code>的方式引用环境变量的值了。</p>
<div class="codehilite"><pre><span></span><span class="p p-Indicator">-</span> <span class="nt">test</span><span class="p">:</span>
<span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">login</span>
<span class="nt">request</span><span class="p">:</span>
<span class="nt">url</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">http://host/api/login</span>
<span class="nt">method</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">POST</span>
<span class="nt">headers</span><span class="p">:</span>
<span class="nt">Content-Type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">application/json</span>
<span class="nt">json</span><span class="p">:</span>
<span class="nt">username</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">${ENV(UserName)}</span>
<span class="nt">password</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">${get_encrypt_password()}</span>
<span class="nt">validate</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="nt">eq</span><span class="p">:</span> <span class="p p-Indicator">[</span><span class="nv">status_code</span><span class="p p-Indicator">,</span> <span class="nv">200</span><span class="p p-Indicator">]</span>
</pre></div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid">
<a href="../request-hook/" title="hook机制" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
</div>
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
上一页
</span>
hook机制
</span>
</div>
</a>
<a href="../testcase-layer/" title="测试用例分层" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
下一页
</span>
测试用例分层
</span>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
</div>
</a>
</nav>
</div>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright &copy; 2017 - 2019 debugtalk
</div>
powered by
<a href="https://www.mkdocs.org">MkDocs</a>
and
<a href="https://squidfunk.github.io/mkdocs-material/">
Material for MkDocs</a>
</div>
<div class="md-footer-social">
<link rel="stylesheet" href="../../assets/fonts/font-awesome.css">
<a href="https://debugtalk.com" class="md-footer-social__link fa fa-globe"></a>
<a href="https://github.com/httprunner" class="md-footer-social__link fa fa-github"></a>
</div>
</div>
</div>
</footer>
</div>
<script src="../../assets/javascripts/application.ac79c3b0.js"></script>
<script src="../../assets/javascripts/lunr/lunr.stemmer.support.js"></script>
<script>app.initialize({version:"1.0.4",url:{base:"../.."}})</script>
<script src="../../js/slardar.js"></script>
</body>
</html>
File diff suppressed because it is too large Load Diff
+843
View File
@@ -0,0 +1,843 @@
<!doctype html>
<html lang="zh" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="description" content="HttpRunner V2.x User Documentation">
<meta name="author" content="debugtalk">
<meta name="lang:clipboard.copy" content="复制">
<meta name="lang:clipboard.copied" content="已复制">
<meta name="lang:search.language" content="jp">
<meta name="lang:search.pipeline.stopwords" content="True">
<meta name="lang:search.pipeline.trimmer" content="True">
<meta name="lang:search.result.none" content="没有找到符合条件的结果">
<meta name="lang:search.result.one" content="找到 1 个符合条件的结果">
<meta name="lang:search.result.other" content="# 个符合条件的结果">
<meta name="lang:search.tokenizer" content="[\uff0c\u3002]+">
<link rel="shortcut icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.4.3">
<title>项目文件组织 - HttpRunner V2.x 中文使用文档</title>
<link rel="stylesheet" href="../../assets/stylesheets/application.30686662.css">
<link rel="stylesheet" href="../../assets/stylesheets/application-palette.a8b3c06d.css">
<meta name="theme-color" content="#3f51b5">
<script src="../../assets/javascripts/modernizr.74668098.js"></script>
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono&display=fallback">
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
<link rel="stylesheet" href="../../assets/fonts/material-icons.css">
<script>
window.ga = window.ga || function() {
(ga.q = ga.q || []).push(arguments)
}
ga.l = +new Date
/* Setup integration and send page view */
ga("create", "UA-114587036-2", "auto")
ga("set", "anonymizeIp", true)
ga("send", "pageview")
/* Register handler to log search on blur */
document.addEventListener("DOMContentLoaded", () => {
if (document.forms.search) {
var query = document.forms.search.query
query.addEventListener("blur", function() {
if (this.value) {
var path = document.location.pathname;
ga("send", "pageview", path + "?q=" + this.value)
}
})
}
})
</script>
<script async src="https://www.google-analytics.com/analytics.js"></script>
</head>
<body dir="ltr" data-md-color-primary="indigo" data-md-color-accent="indigo">
<svg class="md-svg">
<defs>
<svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
</defs>
</svg>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
<a href="#_1" tabindex="1" class="md-skip">
跳转至
</a>
<header class="md-header" data-md-component="header">
<nav class="md-header-nav md-grid">
<div class="md-flex">
<div class="md-flex__cell md-flex__cell--shrink">
<a href="../.." title="HttpRunner V2.x 中文使用文档" class="md-header-nav__button md-logo">
<i class="md-icon"></i>
</a>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
</div>
<div class="md-flex__cell md-flex__cell--stretch">
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
<span class="md-header-nav__topic">
HttpRunner V2.x 中文使用文档
</span>
<span class="md-header-nav__topic">
项目文件组织
</span>
</div>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" placeholder="搜索" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
<label class="md-icon md-search__icon" for="__search"></label>
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
&#xE5CD;
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="result">
<div class="md-search-result__meta">
键入以开始搜索
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<div class="md-header-nav__source">
<a href="https://github.com/HttpRunner/HttpRunner" title="前往 Github 仓库" class="md-source" data-md-source="github">
<div class="md-source__icon">
<svg viewBox="0 0 24 24" width="24" height="24">
<use xlink:href="#__github" width="24" height="24"></use>
</svg>
</div>
<div class="md-source__repository">
HttpRunner
</div>
</a>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container">
<main class="md-main" role="main">
<div class="md-main__inner md-grid" data-md-component="container">
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" data-md-level="0">
<label class="md-nav__title md-nav__title--site" for="__drawer">
<a href="../.." title="HttpRunner V2.x 中文使用文档" class="md-nav__button md-logo">
<i class="md-icon"></i>
</a>
HttpRunner V2.x 中文使用文档
</label>
<div class="md-nav__source">
<a href="https://github.com/HttpRunner/HttpRunner" title="前往 Github 仓库" class="md-source" data-md-source="github">
<div class="md-source__icon">
<svg viewBox="0 0 24 24" width="24" height="24">
<use xlink:href="#__github" width="24" height="24"></use>
</svg>
</div>
<div class="md-source__repository">
HttpRunner
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." title="介绍" class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item">
<a href="../../Installation/" title="安装说明" class="md-nav__link">
安装说明
</a>
</li>
<li class="md-nav__item">
<a href="../../quickstart/" title="快速上手" class="md-nav__link">
快速上手
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
<label class="md-nav__link" for="nav-4">
基础概念
</label>
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
<label class="md-nav__title" for="nav-4">
基础概念
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../concept/nominal/" title="名词解释" class="md-nav__link">
名词解释
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5" checked>
<label class="md-nav__link" for="nav-5">
测试准备
</label>
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
<label class="md-nav__title" for="nav-5">
测试准备
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../record/" title="录制生成用例" class="md-nav__link">
录制生成用例
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
项目文件组织
</label>
<a href="./" title="项目文件组织" class="md-nav__link md-nav__link--active">
项目文件组织
</a>
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="__toc">目录</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
文件类型说明
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
项目文件结构
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../testcase-structure/" title="测试用例组织" class="md-nav__link">
测试用例组织
</a>
</li>
<li class="md-nav__item">
<a href="../request-hook/" title="hook机制" class="md-nav__link">
hook机制
</a>
</li>
<li class="md-nav__item">
<a href="../dot-env/" title="环境变量" class="md-nav__link">
环境变量
</a>
</li>
<li class="md-nav__item">
<a href="../testcase-layer/" title="测试用例分层" class="md-nav__link">
测试用例分层
</a>
</li>
<li class="md-nav__item">
<a href="../parameters/" title="参数化数据驱动" class="md-nav__link">
参数化数据驱动
</a>
</li>
<li class="md-nav__item">
<a href="../validate-pretty/" title="Validate & Prettify" class="md-nav__link">
Validate & Prettify
</a>
</li>
<li class="md-nav__item">
<a href="../security/" title="信息安全" class="md-nav__link">
信息安全
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
<label class="md-nav__link" for="nav-6">
测试执行
</label>
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
<label class="md-nav__title" for="nav-6">
测试执行
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../run-tests/cli/" title="运行测试(CLI)" class="md-nav__link">
运行测试(CLI)
</a>
</li>
<li class="md-nav__item">
<a href="../../run-tests/report/" title="测试报告" class="md-nav__link">
测试报告
</a>
</li>
<li class="md-nav__item">
<a href="../../run-tests/load-test/" title="性能测试" class="md-nav__link">
性能测试
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
<label class="md-nav__link" for="nav-7">
开发扩展
</label>
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
<label class="md-nav__title" for="nav-7">
开发扩展
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../development/architecture/" title="Pipline" class="md-nav__link">
Pipline
</a>
</li>
<li class="md-nav__item">
<a href="../../development/dev-api/" title="基础库调用" class="md-nav__link">
基础库调用
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../FAQ/" title="FAQ" class="md-nav__link">
FAQ
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
<label class="md-nav__link" for="nav-9">
实践案例
</label>
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
<label class="md-nav__title" for="nav-9">
实践案例
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../examples/testerhome-login/" title="TesterHome 登录" class="md-nav__link">
TesterHome 登录
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../related-docs/" title="相关资料" class="md-nav__link">
相关资料
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="__toc">目录</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
文件类型说明
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
项目文件结构
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<h1>项目文件组织</h1>
<h2 id="_1">文件类型说明<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<p>在 HttpRunner 自动化测试项目中,主要存在如下几类文件:</p>
<ul>
<li><code>YAML/JSON</code>(必须):测试用例文件,存储接口测试相关信息</li>
<li><code>debugtalk.py</code>(可选):存储项目中逻辑运算辅助函数<ul>
<li>该文件存在时,将作为项目根目录定位标记,其所在目录即被视为项目工程根目录</li>
<li>该文件不存在时,运行测试的所在路径(<code>CWD</code>)将被视为项目工程根目录</li>
<li>测试用例文件中的相对路径(例如<code>.csv</code>)均需基于项目工程根目录</li>
<li>运行测试后,测试报告文件夹(<code>reports</code>)会生成在项目工程根目录</li>
</ul>
</li>
<li><code>.env</code>(可选):存储项目环境变量,通常用于存储项目敏感信息</li>
<li><code>.csv</code>(可选):项目数据文件,用于进行数据驱动</li>
<li><code>reports</code>:默认生成测试报告的存储文件夹</li>
</ul>
<h2 id="_2">项目文件结构<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h2>
<p>对于接口数比较少,或者测试场景比较简单的项目,组织测试用例时无需分层。在此种情况下,项目文件的目录结构没有任何要求,在项目中只需要一堆 <code>YAML/JSON</code> 文件即可,每一个文件单独对应一条测试用例;根据需要,项目中可能还会有 <code>debugtalk.py</code><code>.env</code>等文件。</p>
<p>推荐的项目文件目录结构示例如下:</p>
<div class="codehilite"><pre><span></span>$ tree demo -a
demo
├── .env
├── debugtalk.py
├── reports
├── testcase1.yml
└── testcase2.json
</pre></div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid">
<a href="../record/" title="录制生成用例" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
</div>
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
上一页
</span>
录制生成用例
</span>
</div>
</a>
<a href="../testcase-structure/" title="测试用例组织" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
下一页
</span>
测试用例组织
</span>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
</div>
</a>
</nav>
</div>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright &copy; 2017 - 2019 debugtalk
</div>
powered by
<a href="https://www.mkdocs.org">MkDocs</a>
and
<a href="https://squidfunk.github.io/mkdocs-material/">
Material for MkDocs</a>
</div>
<div class="md-footer-social">
<link rel="stylesheet" href="../../assets/fonts/font-awesome.css">
<a href="https://debugtalk.com" class="md-footer-social__link fa fa-globe"></a>
<a href="https://github.com/httprunner" class="md-footer-social__link fa fa-github"></a>
</div>
</div>
</div>
</footer>
</div>
<script src="../../assets/javascripts/application.ac79c3b0.js"></script>
<script src="../../assets/javascripts/lunr/lunr.stemmer.support.js"></script>
<script>app.initialize({version:"1.0.4",url:{base:"../.."}})</script>
<script src="../../js/slardar.js"></script>
</body>
</html>
+842
View File
@@ -0,0 +1,842 @@
<!doctype html>
<html lang="zh" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="description" content="HttpRunner V2.x User Documentation">
<meta name="author" content="debugtalk">
<meta name="lang:clipboard.copy" content="复制">
<meta name="lang:clipboard.copied" content="已复制">
<meta name="lang:search.language" content="jp">
<meta name="lang:search.pipeline.stopwords" content="True">
<meta name="lang:search.pipeline.trimmer" content="True">
<meta name="lang:search.result.none" content="没有找到符合条件的结果">
<meta name="lang:search.result.one" content="找到 1 个符合条件的结果">
<meta name="lang:search.result.other" content="# 个符合条件的结果">
<meta name="lang:search.tokenizer" content="[\uff0c\u3002]+">
<link rel="shortcut icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.4.3">
<title>录制生成用例 - HttpRunner V2.x 中文使用文档</title>
<link rel="stylesheet" href="../../assets/stylesheets/application.30686662.css">
<link rel="stylesheet" href="../../assets/stylesheets/application-palette.a8b3c06d.css">
<meta name="theme-color" content="#3f51b5">
<script src="../../assets/javascripts/modernizr.74668098.js"></script>
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono&display=fallback">
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
<link rel="stylesheet" href="../../assets/fonts/material-icons.css">
<script>
window.ga = window.ga || function() {
(ga.q = ga.q || []).push(arguments)
}
ga.l = +new Date
/* Setup integration and send page view */
ga("create", "UA-114587036-2", "auto")
ga("set", "anonymizeIp", true)
ga("send", "pageview")
/* Register handler to log search on blur */
document.addEventListener("DOMContentLoaded", () => {
if (document.forms.search) {
var query = document.forms.search.query
query.addEventListener("blur", function() {
if (this.value) {
var path = document.location.pathname;
ga("send", "pageview", path + "?q=" + this.value)
}
})
}
})
</script>
<script async src="https://www.google-analytics.com/analytics.js"></script>
</head>
<body dir="ltr" data-md-color-primary="indigo" data-md-color-accent="indigo">
<svg class="md-svg">
<defs>
<svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
</defs>
</svg>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
<a href="#har" tabindex="1" class="md-skip">
跳转至
</a>
<header class="md-header" data-md-component="header">
<nav class="md-header-nav md-grid">
<div class="md-flex">
<div class="md-flex__cell md-flex__cell--shrink">
<a href="../.." title="HttpRunner V2.x 中文使用文档" class="md-header-nav__button md-logo">
<i class="md-icon"></i>
</a>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
</div>
<div class="md-flex__cell md-flex__cell--stretch">
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
<span class="md-header-nav__topic">
HttpRunner V2.x 中文使用文档
</span>
<span class="md-header-nav__topic">
录制生成用例
</span>
</div>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" placeholder="搜索" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
<label class="md-icon md-search__icon" for="__search"></label>
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
&#xE5CD;
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="result">
<div class="md-search-result__meta">
键入以开始搜索
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<div class="md-header-nav__source">
<a href="https://github.com/HttpRunner/HttpRunner" title="前往 Github 仓库" class="md-source" data-md-source="github">
<div class="md-source__icon">
<svg viewBox="0 0 24 24" width="24" height="24">
<use xlink:href="#__github" width="24" height="24"></use>
</svg>
</div>
<div class="md-source__repository">
HttpRunner
</div>
</a>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container">
<main class="md-main" role="main">
<div class="md-main__inner md-grid" data-md-component="container">
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" data-md-level="0">
<label class="md-nav__title md-nav__title--site" for="__drawer">
<a href="../.." title="HttpRunner V2.x 中文使用文档" class="md-nav__button md-logo">
<i class="md-icon"></i>
</a>
HttpRunner V2.x 中文使用文档
</label>
<div class="md-nav__source">
<a href="https://github.com/HttpRunner/HttpRunner" title="前往 Github 仓库" class="md-source" data-md-source="github">
<div class="md-source__icon">
<svg viewBox="0 0 24 24" width="24" height="24">
<use xlink:href="#__github" width="24" height="24"></use>
</svg>
</div>
<div class="md-source__repository">
HttpRunner
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." title="介绍" class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item">
<a href="../../Installation/" title="安装说明" class="md-nav__link">
安装说明
</a>
</li>
<li class="md-nav__item">
<a href="../../quickstart/" title="快速上手" class="md-nav__link">
快速上手
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
<label class="md-nav__link" for="nav-4">
基础概念
</label>
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
<label class="md-nav__title" for="nav-4">
基础概念
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../concept/nominal/" title="名词解释" class="md-nav__link">
名词解释
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5" checked>
<label class="md-nav__link" for="nav-5">
测试准备
</label>
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
<label class="md-nav__title" for="nav-5">
测试准备
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
录制生成用例
</label>
<a href="./" title="录制生成用例" class="md-nav__link md-nav__link--active">
录制生成用例
</a>
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="__toc">目录</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#har" class="md-nav__link">
获取 HAR 数据包
</a>
</li>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
转换生成测试用例
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../project-structure/" title="项目文件组织" class="md-nav__link">
项目文件组织
</a>
</li>
<li class="md-nav__item">
<a href="../testcase-structure/" title="测试用例组织" class="md-nav__link">
测试用例组织
</a>
</li>
<li class="md-nav__item">
<a href="../request-hook/" title="hook机制" class="md-nav__link">
hook机制
</a>
</li>
<li class="md-nav__item">
<a href="../dot-env/" title="环境变量" class="md-nav__link">
环境变量
</a>
</li>
<li class="md-nav__item">
<a href="../testcase-layer/" title="测试用例分层" class="md-nav__link">
测试用例分层
</a>
</li>
<li class="md-nav__item">
<a href="../parameters/" title="参数化数据驱动" class="md-nav__link">
参数化数据驱动
</a>
</li>
<li class="md-nav__item">
<a href="../validate-pretty/" title="Validate & Prettify" class="md-nav__link">
Validate & Prettify
</a>
</li>
<li class="md-nav__item">
<a href="../security/" title="信息安全" class="md-nav__link">
信息安全
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
<label class="md-nav__link" for="nav-6">
测试执行
</label>
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
<label class="md-nav__title" for="nav-6">
测试执行
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../run-tests/cli/" title="运行测试(CLI)" class="md-nav__link">
运行测试(CLI)
</a>
</li>
<li class="md-nav__item">
<a href="../../run-tests/report/" title="测试报告" class="md-nav__link">
测试报告
</a>
</li>
<li class="md-nav__item">
<a href="../../run-tests/load-test/" title="性能测试" class="md-nav__link">
性能测试
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
<label class="md-nav__link" for="nav-7">
开发扩展
</label>
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
<label class="md-nav__title" for="nav-7">
开发扩展
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../development/architecture/" title="Pipline" class="md-nav__link">
Pipline
</a>
</li>
<li class="md-nav__item">
<a href="../../development/dev-api/" title="基础库调用" class="md-nav__link">
基础库调用
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../FAQ/" title="FAQ" class="md-nav__link">
FAQ
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
<label class="md-nav__link" for="nav-9">
实践案例
</label>
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
<label class="md-nav__title" for="nav-9">
实践案例
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../examples/testerhome-login/" title="TesterHome 登录" class="md-nav__link">
TesterHome 登录
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../related-docs/" title="相关资料" class="md-nav__link">
相关资料
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="__toc">目录</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#har" class="md-nav__link">
获取 HAR 数据包
</a>
</li>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
转换生成测试用例
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<h1>录制生成用例</h1>
<p>为了简化测试用例的编写工作,HttpRunner 实现了测试用例生成的功能,对应的转换工具为一个独立的项目:<a href="https://github.com/HttpRunner/har2case">har2case</a></p>
<p>简单来说,就是当前主流的抓包工具和浏览器都支持将抓取得到的数据包导出为标准通用的 HAR 格式(HTTP Archive),然后 HttpRunner 实现了将 HAR 格式的数据包转换为<code>YAML/JSON</code>格式的测试用例文件的功能。</p>
<h2 id="har">获取 HAR 数据包<a class="headerlink" href="#har" title="Permanent link">&para;</a></h2>
<p>在转换生成测试用例之前,需要先将抓取得到的数据包导出为 HAR 格式的文件。在<code>Charles Proxy</code>中的操作方式为,选中需要转换的接口(可多选或全选),点击右键,在悬浮的菜单目录中点击【Export...】,格式选择<code>HTTP Archive(.har)</code>后保存即可;假设我们保存的文件名称为 demo.har。</p>
<p><img alt="" src="../../images/charles-export.jpg" /></p>
<p><img alt="" src="../../images/charles-save-har.jpg" /></p>
<h2 id="_1">转换生成测试用例<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<p>然后,在命令行终端中运行 har2case 命令,即可将 demo.har 转换为 HttpRunner 的测试用例文件。</p>
<p>使用 <code>har2case</code> 转换脚本时默认转换为 JSON 格式。</p>
<div class="codehilite"><pre><span></span>$ har2case docs/data/demo-quickstart.har
INFO:root:Start to generate testcase.
INFO:root:dump testcase to JSON format.
INFO:root:Generate JSON testcase successfully: docs/data/demo-quickstart.json
</pre></div>
<p>加上 <code>-2y</code>/<code>--to-yml</code> 参数后转换为 YAML 格式。</p>
<div class="codehilite"><pre><span></span>$ har2case docs/data/demo-quickstart.har -2y
INFO:root:Start to generate testcase.
INFO:root:dump testcase to YAML format.
INFO:root:Generate YAML testcase successfully: docs/data/demo-quickstart.yml
</pre></div>
<p>两种格式完全等价,YAML 格式更简洁,JSON 格式支持的工具更丰富,大家可根据个人喜好进行选择。</p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid">
<a href="../../concept/nominal/" title="名词解释" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
</div>
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
上一页
</span>
名词解释
</span>
</div>
</a>
<a href="../project-structure/" title="项目文件组织" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
下一页
</span>
项目文件组织
</span>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
</div>
</a>
</nav>
</div>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright &copy; 2017 - 2019 debugtalk
</div>
powered by
<a href="https://www.mkdocs.org">MkDocs</a>
and
<a href="https://squidfunk.github.io/mkdocs-material/">
Material for MkDocs</a>
</div>
<div class="md-footer-social">
<link rel="stylesheet" href="../../assets/fonts/font-awesome.css">
<a href="https://debugtalk.com" class="md-footer-social__link fa fa-globe"></a>
<a href="https://github.com/httprunner" class="md-footer-social__link fa fa-github"></a>
</div>
</div>
</div>
</footer>
</div>
<script src="../../assets/javascripts/application.ac79c3b0.js"></script>
<script src="../../assets/javascripts/lunr/lunr.stemmer.support.js"></script>
<script>app.initialize({version:"1.0.4",url:{base:"../.."}})</script>
<script src="../../js/slardar.js"></script>
</body>
</html>
File diff suppressed because it is too large Load Diff
+832
View File
@@ -0,0 +1,832 @@
<!doctype html>
<html lang="zh" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="description" content="HttpRunner V2.x User Documentation">
<meta name="author" content="debugtalk">
<meta name="lang:clipboard.copy" content="复制">
<meta name="lang:clipboard.copied" content="已复制">
<meta name="lang:search.language" content="jp">
<meta name="lang:search.pipeline.stopwords" content="True">
<meta name="lang:search.pipeline.trimmer" content="True">
<meta name="lang:search.result.none" content="没有找到符合条件的结果">
<meta name="lang:search.result.one" content="找到 1 个符合条件的结果">
<meta name="lang:search.result.other" content="# 个符合条件的结果">
<meta name="lang:search.tokenizer" content="[\uff0c\u3002]+">
<link rel="shortcut icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.4.3">
<title>信息安全 - HttpRunner V2.x 中文使用文档</title>
<link rel="stylesheet" href="../../assets/stylesheets/application.30686662.css">
<link rel="stylesheet" href="../../assets/stylesheets/application-palette.a8b3c06d.css">
<meta name="theme-color" content="#3f51b5">
<script src="../../assets/javascripts/modernizr.74668098.js"></script>
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono&display=fallback">
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
<link rel="stylesheet" href="../../assets/fonts/material-icons.css">
<script>
window.ga = window.ga || function() {
(ga.q = ga.q || []).push(arguments)
}
ga.l = +new Date
/* Setup integration and send page view */
ga("create", "UA-114587036-2", "auto")
ga("set", "anonymizeIp", true)
ga("send", "pageview")
/* Register handler to log search on blur */
document.addEventListener("DOMContentLoaded", () => {
if (document.forms.search) {
var query = document.forms.search.query
query.addEventListener("blur", function() {
if (this.value) {
var path = document.location.pathname;
ga("send", "pageview", path + "?q=" + this.value)
}
})
}
})
</script>
<script async src="https://www.google-analytics.com/analytics.js"></script>
</head>
<body dir="ltr" data-md-color-primary="indigo" data-md-color-accent="indigo">
<svg class="md-svg">
<defs>
<svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
</defs>
</svg>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
<a href="#_1" tabindex="1" class="md-skip">
跳转至
</a>
<header class="md-header" data-md-component="header">
<nav class="md-header-nav md-grid">
<div class="md-flex">
<div class="md-flex__cell md-flex__cell--shrink">
<a href="../.." title="HttpRunner V2.x 中文使用文档" class="md-header-nav__button md-logo">
<i class="md-icon"></i>
</a>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
</div>
<div class="md-flex__cell md-flex__cell--stretch">
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
<span class="md-header-nav__topic">
HttpRunner V2.x 中文使用文档
</span>
<span class="md-header-nav__topic">
信息安全
</span>
</div>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" placeholder="搜索" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
<label class="md-icon md-search__icon" for="__search"></label>
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
&#xE5CD;
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="result">
<div class="md-search-result__meta">
键入以开始搜索
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<div class="md-header-nav__source">
<a href="https://github.com/HttpRunner/HttpRunner" title="前往 Github 仓库" class="md-source" data-md-source="github">
<div class="md-source__icon">
<svg viewBox="0 0 24 24" width="24" height="24">
<use xlink:href="#__github" width="24" height="24"></use>
</svg>
</div>
<div class="md-source__repository">
HttpRunner
</div>
</a>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container">
<main class="md-main" role="main">
<div class="md-main__inner md-grid" data-md-component="container">
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" data-md-level="0">
<label class="md-nav__title md-nav__title--site" for="__drawer">
<a href="../.." title="HttpRunner V2.x 中文使用文档" class="md-nav__button md-logo">
<i class="md-icon"></i>
</a>
HttpRunner V2.x 中文使用文档
</label>
<div class="md-nav__source">
<a href="https://github.com/HttpRunner/HttpRunner" title="前往 Github 仓库" class="md-source" data-md-source="github">
<div class="md-source__icon">
<svg viewBox="0 0 24 24" width="24" height="24">
<use xlink:href="#__github" width="24" height="24"></use>
</svg>
</div>
<div class="md-source__repository">
HttpRunner
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." title="介绍" class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item">
<a href="../../Installation/" title="安装说明" class="md-nav__link">
安装说明
</a>
</li>
<li class="md-nav__item">
<a href="../../quickstart/" title="快速上手" class="md-nav__link">
快速上手
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
<label class="md-nav__link" for="nav-4">
基础概念
</label>
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
<label class="md-nav__title" for="nav-4">
基础概念
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../concept/nominal/" title="名词解释" class="md-nav__link">
名词解释
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5" checked>
<label class="md-nav__link" for="nav-5">
测试准备
</label>
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
<label class="md-nav__title" for="nav-5">
测试准备
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../record/" title="录制生成用例" class="md-nav__link">
录制生成用例
</a>
</li>
<li class="md-nav__item">
<a href="../project-structure/" title="项目文件组织" class="md-nav__link">
项目文件组织
</a>
</li>
<li class="md-nav__item">
<a href="../testcase-structure/" title="测试用例组织" class="md-nav__link">
测试用例组织
</a>
</li>
<li class="md-nav__item">
<a href="../request-hook/" title="hook机制" class="md-nav__link">
hook机制
</a>
</li>
<li class="md-nav__item">
<a href="../dot-env/" title="环境变量" class="md-nav__link">
环境变量
</a>
</li>
<li class="md-nav__item">
<a href="../testcase-layer/" title="测试用例分层" class="md-nav__link">
测试用例分层
</a>
</li>
<li class="md-nav__item">
<a href="../parameters/" title="参数化数据驱动" class="md-nav__link">
参数化数据驱动
</a>
</li>
<li class="md-nav__item">
<a href="../validate-pretty/" title="Validate & Prettify" class="md-nav__link">
Validate & Prettify
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
信息安全
</label>
<a href="./" title="信息安全" class="md-nav__link md-nav__link--active">
信息安全
</a>
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="__toc">目录</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
背景
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
解决方案
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
<label class="md-nav__link" for="nav-6">
测试执行
</label>
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
<label class="md-nav__title" for="nav-6">
测试执行
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../run-tests/cli/" title="运行测试(CLI)" class="md-nav__link">
运行测试(CLI)
</a>
</li>
<li class="md-nav__item">
<a href="../../run-tests/report/" title="测试报告" class="md-nav__link">
测试报告
</a>
</li>
<li class="md-nav__item">
<a href="../../run-tests/load-test/" title="性能测试" class="md-nav__link">
性能测试
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
<label class="md-nav__link" for="nav-7">
开发扩展
</label>
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
<label class="md-nav__title" for="nav-7">
开发扩展
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../development/architecture/" title="Pipline" class="md-nav__link">
Pipline
</a>
</li>
<li class="md-nav__item">
<a href="../../development/dev-api/" title="基础库调用" class="md-nav__link">
基础库调用
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../FAQ/" title="FAQ" class="md-nav__link">
FAQ
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
<label class="md-nav__link" for="nav-9">
实践案例
</label>
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
<label class="md-nav__title" for="nav-9">
实践案例
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../examples/testerhome-login/" title="TesterHome 登录" class="md-nav__link">
TesterHome 登录
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../related-docs/" title="相关资料" class="md-nav__link">
相关资料
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="__toc">目录</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
背景
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
解决方案
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<h1>信息安全</h1>
<h2 id="_1">背景<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<p>很多时候项目代码在运行时需要使用到账号、密码、key等敏感数据信息,但是从信息安全的角度考虑,我们是不能将这些敏感数据提交到代码仓库的,主要原因有两个:</p>
<ul>
<li>加强权限管控:参与项目的开发人员可能会有很多,大家都有读取代码仓库的权限,但是像 key 这类极度敏感的信息不应该所有人都有权限获取;</li>
<li>减少代码泄漏的危害性:假如代码出现泄漏,敏感数据信息不应该也同时泄漏。</li>
</ul>
<h2 id="_2">解决方案<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h2>
<p>那代码部署到服务器或 Jenkins 执行机后,运行时要使用到这些敏感数据信息,该怎么操作呢?</p>
<p>推荐的操作方式为:</p>
<ul>
<li>对服务器进行权限管控,只有运维人员(或者核心开发人员)才有登录服务器的权限;</li>
<li>运维人员(或者核心开发人员):在运行的机器上将敏感数据设置到系统的环境变量中;</li>
<li>普通开发人员:只需要知道敏感信息的变量名称,在代码中通过读取环境变量的方式获取敏感数据。</li>
</ul>
<p>存储敏感数据(设置环境变量)和使用敏感数据(引用环境变量)的具体方法,可参考<a href="/prepare/dot-env/">环境变量</a>使用说明文档。</p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid">
<a href="../validate-pretty/" title="Validate & Prettify" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
</div>
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
上一页
</span>
Validate & Prettify
</span>
</div>
</a>
<a href="../../run-tests/cli/" title="运行测试(CLI)" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
下一页
</span>
运行测试(CLI)
</span>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
</div>
</a>
</nav>
</div>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright &copy; 2017 - 2019 debugtalk
</div>
powered by
<a href="https://www.mkdocs.org">MkDocs</a>
and
<a href="https://squidfunk.github.io/mkdocs-material/">
Material for MkDocs</a>
</div>
<div class="md-footer-social">
<link rel="stylesheet" href="../../assets/fonts/font-awesome.css">
<a href="https://debugtalk.com" class="md-footer-social__link fa fa-globe"></a>
<a href="https://github.com/httprunner" class="md-footer-social__link fa fa-github"></a>
</div>
</div>
</div>
</footer>
</div>
<script src="../../assets/javascripts/application.ac79c3b0.js"></script>
<script src="../../assets/javascripts/lunr/lunr.stemmer.support.js"></script>
<script>app.initialize({version:"1.0.4",url:{base:"../.."}})</script>
<script src="../../js/slardar.js"></script>
</body>
</html>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long