mirror of
https://github.com/httprunner/httprunner.git
synced 2026-07-01 20:41:36 +08:00
Deployed e42125a with MkDocs version: 1.1.2
This commit is contained in:
@@ -311,25 +311,182 @@
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#testcase-format-details" class="md-nav__link">
|
||||
testcase format details
|
||||
<a href="#testcase-structure" class="md-nav__link">
|
||||
testcase structure
|
||||
</a>
|
||||
|
||||
<nav class="md-nav" aria-label="testcase format details">
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#chain-call" class="md-nav__link">
|
||||
chain call
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#config" class="md-nav__link">
|
||||
config
|
||||
</a>
|
||||
|
||||
<nav class="md-nav" aria-label="config">
|
||||
<ul class="md-nav__list">
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#basic-structure" class="md-nav__link">
|
||||
basic structure
|
||||
<a href="#name-required" class="md-nav__link">
|
||||
name (required)
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#chain-call" class="md-nav__link">
|
||||
chain call
|
||||
<a href="#base_url-optional" class="md-nav__link">
|
||||
base_url (optional)
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#variables-optional" class="md-nav__link">
|
||||
variables (optional)
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#verify-optional" class="md-nav__link">
|
||||
verify (optional)
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#export-optional" class="md-nav__link">
|
||||
export (optional)
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#teststeps" class="md-nav__link">
|
||||
teststeps
|
||||
</a>
|
||||
|
||||
<nav class="md-nav" aria-label="teststeps">
|
||||
<ul class="md-nav__list">
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#runrequestname" class="md-nav__link">
|
||||
RunRequest(name)
|
||||
</a>
|
||||
|
||||
<nav class="md-nav" aria-label="RunRequest(name)">
|
||||
<ul class="md-nav__list">
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#with_variables" class="md-nav__link">
|
||||
.with_variables
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#methodurl" class="md-nav__link">
|
||||
.method(url)
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#with_params" class="md-nav__link">
|
||||
.with_params
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#with_headers" class="md-nav__link">
|
||||
.with_headers
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#with_cookies" class="md-nav__link">
|
||||
.with_cookies
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#with_data" class="md-nav__link">
|
||||
.with_data
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#with_json" class="md-nav__link">
|
||||
.with_json
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#extract" class="md-nav__link">
|
||||
extract
|
||||
</a>
|
||||
|
||||
<nav class="md-nav" aria-label="extract">
|
||||
<ul class="md-nav__list">
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#with_jmespath" class="md-nav__link">
|
||||
.with_jmespath
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#validate" class="md-nav__link">
|
||||
validate
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#runtestcasename" class="md-nav__link">
|
||||
RunTestCase(name)
|
||||
</a>
|
||||
|
||||
<nav class="md-nav" aria-label="RunTestCase(name)">
|
||||
<ul class="md-nav__list">
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#with_variables_1" class="md-nav__link">
|
||||
.with_variables
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
@@ -406,25 +563,182 @@
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#testcase-format-details" class="md-nav__link">
|
||||
testcase format details
|
||||
<a href="#testcase-structure" class="md-nav__link">
|
||||
testcase structure
|
||||
</a>
|
||||
|
||||
<nav class="md-nav" aria-label="testcase format details">
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#chain-call" class="md-nav__link">
|
||||
chain call
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#config" class="md-nav__link">
|
||||
config
|
||||
</a>
|
||||
|
||||
<nav class="md-nav" aria-label="config">
|
||||
<ul class="md-nav__list">
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#basic-structure" class="md-nav__link">
|
||||
basic structure
|
||||
<a href="#name-required" class="md-nav__link">
|
||||
name (required)
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#chain-call" class="md-nav__link">
|
||||
chain call
|
||||
<a href="#base_url-optional" class="md-nav__link">
|
||||
base_url (optional)
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#variables-optional" class="md-nav__link">
|
||||
variables (optional)
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#verify-optional" class="md-nav__link">
|
||||
verify (optional)
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#export-optional" class="md-nav__link">
|
||||
export (optional)
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#teststeps" class="md-nav__link">
|
||||
teststeps
|
||||
</a>
|
||||
|
||||
<nav class="md-nav" aria-label="teststeps">
|
||||
<ul class="md-nav__list">
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#runrequestname" class="md-nav__link">
|
||||
RunRequest(name)
|
||||
</a>
|
||||
|
||||
<nav class="md-nav" aria-label="RunRequest(name)">
|
||||
<ul class="md-nav__list">
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#with_variables" class="md-nav__link">
|
||||
.with_variables
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#methodurl" class="md-nav__link">
|
||||
.method(url)
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#with_params" class="md-nav__link">
|
||||
.with_params
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#with_headers" class="md-nav__link">
|
||||
.with_headers
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#with_cookies" class="md-nav__link">
|
||||
.with_cookies
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#with_data" class="md-nav__link">
|
||||
.with_data
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#with_json" class="md-nav__link">
|
||||
.with_json
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#extract" class="md-nav__link">
|
||||
extract
|
||||
</a>
|
||||
|
||||
<nav class="md-nav" aria-label="extract">
|
||||
<ul class="md-nav__list">
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#with_jmespath" class="md-nav__link">
|
||||
.with_jmespath
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#validate" class="md-nav__link">
|
||||
validate
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#runtestcasename" class="md-nav__link">
|
||||
RunTestCase(name)
|
||||
</a>
|
||||
|
||||
<nav class="md-nav" aria-label="RunTestCase(name)">
|
||||
<ul class="md-nav__list">
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#with_variables_1" class="md-nav__link">
|
||||
.with_variables
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
@@ -453,8 +767,7 @@
|
||||
<h2 id="record-generate-testcase">record & generate testcase<a class="headerlink" href="#record-generate-testcase" title="Permanent link">¶</a></h2>
|
||||
<p>If the SUT (system under test) is ready, the most efficient way is to capture HTTP traffic first and then generate testcases with HAR file. Refer to <a href="/user/gen_tests/"><code>Record & Generate testcase</code></a> for more details.</p>
|
||||
<p>Based on the generated pytest testcase, you can then do some adjustment as needed, thus you need to know the details of testcase format.</p>
|
||||
<h2 id="testcase-format-details">testcase format details<a class="headerlink" href="#testcase-format-details" title="Permanent link">¶</a></h2>
|
||||
<h3 id="basic-structure">basic structure<a class="headerlink" href="#basic-structure" title="Permanent link">¶</a></h3>
|
||||
<h2 id="testcase-structure">testcase structure<a class="headerlink" href="#testcase-structure" title="Permanent link">¶</a></h2>
|
||||
<p>Each testcase is a subclass of <code>HttpRunner</code>, and must have two class attributes: <code>config</code> and <code>teststeps</code>.</p>
|
||||
<ul>
|
||||
<li>config: configure testcase level settings, including <code>base_url</code>, <code>verify</code>, <code>variables</code>, <code>export</code>.</li>
|
||||
@@ -521,8 +834,63 @@
|
||||
</code></pre></div>
|
||||
|
||||
|
||||
<h3 id="chain-call">chain call<a class="headerlink" href="#chain-call" title="Permanent link">¶</a></h3>
|
||||
<h2 id="chain-call">chain call<a class="headerlink" href="#chain-call" title="Permanent link">¶</a></h2>
|
||||
<p>One of the most awesome features of HttpRunner v3.x is <code>chain call</code>, with which you do not need to remember any testcase format details and you can get intelligent completion when you write testcases in IDE.</p>
|
||||
<p><img alt="" src="/images/httprunner-chain-call-config.png" /></p>
|
||||
<p><img alt="" src="/images/httprunner-chain-call-step-validate.png" /></p>
|
||||
<h2 id="config">config<a class="headerlink" href="#config" title="Permanent link">¶</a></h2>
|
||||
<p>Each testcase should have one <code>config</code> part, in which you can configure testcase level settings.</p>
|
||||
<h3 id="name-required">name (required)<a class="headerlink" href="#name-required" title="Permanent link">¶</a></h3>
|
||||
<p>Specify testcase name. This will be displayed in execution log and test report.</p>
|
||||
<h3 id="base_url-optional">base_url (optional)<a class="headerlink" href="#base_url-optional" title="Permanent link">¶</a></h3>
|
||||
<p>Specify common schema and host part of the SUT, e.g. <code>https://postman-echo.com</code>. If <code>base_url</code> is specified, url in teststep can only set relative path part. This is especially useful if you want to switch between different SUT environments.</p>
|
||||
<h3 id="variables-optional">variables (optional)<a class="headerlink" href="#variables-optional" title="Permanent link">¶</a></h3>
|
||||
<p>Specify common variables of testcase. Each teststep can reference config variable which is not set in step variables. In other words, step variables have higher priority than config variables.</p>
|
||||
<h3 id="verify-optional">verify (optional)<a class="headerlink" href="#verify-optional" title="Permanent link">¶</a></h3>
|
||||
<p>Specify whether to verify the server’s TLS certificate. This is especially useful if we want to record HTTP traffic of testcase execution, because SSLError will be occurred if verify is not set or been set to True.</p>
|
||||
<blockquote>
|
||||
<p>SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1076)'))</p>
|
||||
</blockquote>
|
||||
<h3 id="export-optional">export (optional)<a class="headerlink" href="#export-optional" title="Permanent link">¶</a></h3>
|
||||
<p>Specify the exported session variables of testcase. Consider each testcase as a black box, config <code>variables</code> is the input part, and config <code>export</code> is the output part. In particular, when a testcase is referenced in another testcase's step, and will be extracted some session variables to be used in subsequent teststeps, then the extracted session variables should be configured in config <code>export</code> part.</p>
|
||||
<h2 id="teststeps">teststeps<a class="headerlink" href="#teststeps" title="Permanent link">¶</a></h2>
|
||||
<p>Each testcase should have one or multiple ordered test steps (<code>List[Step]</code>), each step is corresponding to a API request or another testcase reference call.</p>
|
||||
<p><img alt="" src="/images/httprunner-testcase.png" /></p>
|
||||
<blockquote>
|
||||
<p>Notice: The concept of API in HttpRunner v2.x has been deprecated for simplification. You can consider API as a testcase that has only one request step.</p>
|
||||
</blockquote>
|
||||
<h3 id="runrequestname">RunRequest(name)<a class="headerlink" href="#runrequestname" title="Permanent link">¶</a></h3>
|
||||
<p><code>RunRequest</code> is used in a step to make request to API and do some extraction or validations for response.</p>
|
||||
<p>The argument <code>name</code> of RunRequest is used to specify teststep name, which will be displayed in execution log and test report.</p>
|
||||
<h4 id="with_variables">.with_variables<a class="headerlink" href="#with_variables" title="Permanent link">¶</a></h4>
|
||||
<p>Specify teststep variables. The variables of each step are independent, thus if you want to share variables in multiple steps, you should define variables in config variables. Besides, the step variables will override the ones that have the same name in config variables.</p>
|
||||
<h4 id="methodurl">.method(url)<a class="headerlink" href="#methodurl" title="Permanent link">¶</a></h4>
|
||||
<p>Specify HTTP method and the url of SUT. These are corresponding to <code>method</code> and <code>url</code> arguments of <a href="https://requests.readthedocs.io/en/master/api/#requests.request"><code>requests.request</code></a>.</p>
|
||||
<p>If <code>base_url</code> is set in config, url can only set relative path part.</p>
|
||||
<h4 id="with_params">.with_params<a class="headerlink" href="#with_params" title="Permanent link">¶</a></h4>
|
||||
<p>Specify query string for the request url. This is corresponding to the <code>params</code> argument of <a href="https://requests.readthedocs.io/en/master/api/#requests.request"><code>requests.request</code></a>.</p>
|
||||
<h4 id="with_headers">.with_headers<a class="headerlink" href="#with_headers" title="Permanent link">¶</a></h4>
|
||||
<p>Specify HTTP headers for the request. This is corresponding to the <code>headers</code> argument of <a href="https://requests.readthedocs.io/en/master/api/#requests.request"><code>requests.request</code></a>.</p>
|
||||
<h4 id="with_cookies">.with_cookies<a class="headerlink" href="#with_cookies" title="Permanent link">¶</a></h4>
|
||||
<p>Specify HTTP request cookies. This is corresponding to the <code>cookies</code> argument of <a href="https://requests.readthedocs.io/en/master/api/#requests.request"><code>requests.request</code></a>.</p>
|
||||
<h4 id="with_data">.with_data<a class="headerlink" href="#with_data" title="Permanent link">¶</a></h4>
|
||||
<p>Specify HTTP request body. This is corresponding to the <code>data</code> argument of <a href="https://requests.readthedocs.io/en/master/api/#requests.request"><code>requests.request</code></a>.</p>
|
||||
<h4 id="with_json">.with_json<a class="headerlink" href="#with_json" title="Permanent link">¶</a></h4>
|
||||
<p>Specify HTTP request body in json. This is corresponding to the <code>json</code> argument of <a href="https://requests.readthedocs.io/en/master/api/#requests.request"><code>requests.request</code></a>.</p>
|
||||
<h4 id="extract">extract<a class="headerlink" href="#extract" title="Permanent link">¶</a></h4>
|
||||
<h5 id="with_jmespath">.with_jmespath<a class="headerlink" href="#with_jmespath" title="Permanent link">¶</a></h5>
|
||||
<p>Extract JSON response body with <a href="https://jmespath.org/">jmespath</a>.</p>
|
||||
<blockquote>
|
||||
<p>with_jmespath(jmes_path: Text, var_name: Text)</p>
|
||||
</blockquote>
|
||||
<ul>
|
||||
<li>jmes_path: jmespath expression</li>
|
||||
<li>var_name: the variable name that stores extracted value</li>
|
||||
</ul>
|
||||
<h4 id="validate">validate<a class="headerlink" href="#validate" title="Permanent link">¶</a></h4>
|
||||
<h3 id="runtestcasename">RunTestCase(name)<a class="headerlink" href="#runtestcasename" title="Permanent link">¶</a></h3>
|
||||
<h4 id="with_variables_1">.with_variables<a class="headerlink" href="#with_variables_1" title="Permanent link">¶</a></h4>
|
||||
<p>Besides, <code>variables</code>/<code>extract</code>/<code>validate</code>/<code>hooks</code> mechanisms are supported to create extremely complex test scenarios.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user