<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>通过实践学python on 重定向学院</title><link>https://itest2025.pages.dev/categories/%E9%80%9A%E8%BF%87%E5%AE%9E%E8%B7%B5%E5%AD%A6python/</link><description>Recent content in 通过实践学python on 重定向学院</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Tue, 17 Jun 2025 17:29:15 +0800</lastBuildDate><atom:link href="https://itest2025.pages.dev/categories/%E9%80%9A%E8%BF%87%E5%AE%9E%E8%B7%B5%E5%AD%A6python/index.xml" rel="self" type="application/rss+xml"/><item><title>1. 第一个程序</title><link>https://itest2025.pages.dev/tutorials/28-001-1-%E7%AC%AC%E4%B8%80%E4%B8%AA%E7%A8%8B%E5%BA%8F/</link><pubDate>Tue, 07 Nov 2017 08:17:22 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/28-001-1-%E7%AC%AC%E4%B8%80%E4%B8%AA%E7%A8%8B%E5%BA%8F/</guid><description>&lt;h3 id="背景">背景&lt;/h3>
&lt;p>我们的第一个python程序将要实现最简单的打印测试报告的功能。&lt;/p>
&lt;p>我们希望可以将回归测试的结果打印到命令行窗口里。测试结果如下所示&lt;/p>
&lt;pre tabindex="0">&lt;code>本次测试功能点5个
测试用例20个
共执行测试用例20个
共发现缺陷0个
用例通过率100%
&lt;/code>&lt;/pre>&lt;h3 id="代码实现">代码实现&lt;/h3>
&lt;p>新建名为&lt;code>print_report.py&lt;/code>的文本文件，用文本编辑器打开，输入如下内容:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;本次测试功能点5个&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;测试用例20个&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;共执行测试用例20个&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;共发现缺陷0个&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;用例通过率100%&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="运行">运行&lt;/h3>
&lt;p>在命令行中使用下面的命令去执行代码&lt;/p>
&lt;pre tabindex="0">&lt;code>python print_report.py
&lt;/code>&lt;/pre>&lt;p>注意: &lt;strong>初学者一般不知道如何在命令行中cd进具体的文件夹，macos可能相对简单一些，对于使用windows的同学来说，cd到具体的文件夹需要两步&lt;/strong>&lt;/p>
&lt;p>比如我们需要cd到E:\code文件夹，那么步骤应该是&lt;/p>
&lt;ul>
&lt;li>首先敲盘符&lt;code>E:&lt;/code>，然后回车，表示进入E盘先&lt;/li>
&lt;li>然后敲&lt;code>cd code&lt;/code>并回车，表示进入code目录&lt;/li>
&lt;/ul>
&lt;h3 id="你应该可以看到">你应该可以看到&lt;/h3>
&lt;p>如果没有出错的话，你应该可以看到命令行窗口显示如下的内容&lt;/p>
&lt;pre tabindex="0">&lt;code>本次测试功能点5个
测试用例20个
共执行测试用例20个
共发现缺陷0个
用例通过率100%
&lt;/code>&lt;/pre>&lt;p>如果你遇到错误，那么很多情况下可能会提示&lt;/p>
&lt;pre tabindex="0">&lt;code>python print_report.py // 1
 File &amp;#34;print_report.py&amp;#34;, line 4 // 2
 print(&amp;#39;共发现缺陷0个) // 3
 ^ // 4
SyntaxError: EOL while scanning string literal // 5
&lt;/code>&lt;/pre>&lt;p>作为初学者，把代码尽可能敲正确和看懂错误提示是非常关键的两件事。&lt;/p>
&lt;p>我们在写代码的时候经常会遇到各种各样的错误提示，我们一般可以从错误提示里获得如下的信息&lt;/p>
&lt;ul>
&lt;li>哪一行代码出错了&lt;/li>
&lt;li>出错的原因具体是什么&lt;/li>
&lt;/ul>
&lt;p>现在我们来具体分析上面的错误信息&lt;/p>
&lt;ol>
&lt;li>我们运行了名为的print_report.py的脚本&lt;/li>
&lt;li>pytnon告诉我们print_report.py的文件的第4行有错误&lt;/li>
&lt;li>python把出错行的内容打印出来&lt;/li>
&lt;li>然后python通过&lt;code>^&lt;/code>字符告诉我们错误具体发生在哪里。可以看出我们漏掉了一个单引号&lt;/li>
&lt;li>最后python告诉我们具体的错误是什么，这里是&amp;quot;SyntaxError&amp;quot;。一般情况下，我们可以把错误信息，也就是&lt;code>SyntaxError: EOL while scanning string literal&lt;/code>这一行直接拷贝到搜索引擎里去搜索具体的解决方案，大部分情况下，我们都可以得到满意的结果&lt;/li>
&lt;/ol>
&lt;h3 id="动手时间">动手时间&lt;/h3>
&lt;p>尝试去做下面一些事情&lt;/p></description></item><item><title>2. #及注释</title><link>https://itest2025.pages.dev/tutorials/28-002-2-%E5%8F%8A%E6%B3%A8%E9%87%8A/</link><pubDate>Mon, 06 Nov 2017 08:17:22 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/28-002-2-%E5%8F%8A%E6%B3%A8%E9%87%8A/</guid><description>&lt;h3 id="背景">背景&lt;/h3>
&lt;p>注释是代码中非常重要的部分，一般来说注释的作用有下面一些&lt;/p>
&lt;ul>
&lt;li>告诉你这段代码中实现了些什么，帮助你或其他阅读代码的人去理解代码&lt;/li>
&lt;li>暂时让某段代码失效&lt;/li>
&lt;/ul>
&lt;h3 id="代码实现">代码实现&lt;/h3>
&lt;p>新建名为&lt;code>report_with_comments.py&lt;/code>的文本文件，用文本编辑器打开，输入如下内容:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 打印出本次测试的测试结果&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;本次测试功能点5个&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 本次回归测试涉及到多个功能点&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;测试用例20个&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 这些功能点一共编写了多少用例&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;共执行测试用例20个&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 回归了多少个&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;共发现缺陷0个&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 这些用例总用发现了多少个缺陷&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;用例通过率100%&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 通过率计算公式: 执行成功的用例/用例总数&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 结束打印&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;回归通过&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>注意: 照着上面代码敲一遍，敲完以后检查一遍，因为对于新手来说，一次性就敲准确不那么容易。&lt;/p>
&lt;h3 id="运行">运行&lt;/h3>
&lt;p>在命令行中使用下面的命令去执行代码&lt;/p>
&lt;pre tabindex="0">&lt;code>python report_with_comments.py
&lt;/code>&lt;/pre>&lt;h3 id="你应该可以看到">你应该可以看到&lt;/h3>
&lt;p>如果没有出错的话，你应该可以看到命令行窗口显示如下的内容&lt;/p>
&lt;pre tabindex="0">&lt;code>本次测试功能点5个
测试用例20个
共执行测试用例20个
共发现缺陷0个
用例通过率100%
回归通过
&lt;/code>&lt;/pre>&lt;h3 id="动手时间">动手时间&lt;/h3>
&lt;ul>
&lt;li>自己搞清楚&lt;code>#&lt;/code>的作用是什么&lt;/li>
&lt;li>把上面的代码大声读出来，没错，跟读课文一样读出来，看能不能找到自己代码中的错误&lt;/li>
&lt;li>把上面的代码反过来阅读一遍，这次就不用读出声来了，看能不能发现更多的错误&lt;/li>
&lt;/ul>
&lt;h3 id="常见问题">常见问题&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>&lt;code>print('Hi, # there')&lt;/code>中的&amp;quot;#&amp;ldquo;为什么没有注释的作用？ 因为当&amp;rdquo;#&amp;ldquo;在字符串中(字符串就是用一对单引号或双引号包围的文本或文字)的时候，&amp;rdquo;#&amp;ldquo;就不再是注释的符号，而是只是一个普通字符，会被原原本本打印出来&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>如何注释多行代码呢？&lt;/strong> 在每一行前面都加个&amp;rdquo;#&amp;ldquo;号&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>为什么我需要倒过来读代码？&lt;/strong> 这可以让你换个角度看自己写的东西，更容易发现代码中的错误&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>原始封面&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="https://images.unsplash.com/photo-1516315720917-231ef9acce48?w=300"
 data-srcset="https://images.unsplash.com/photo-1516315720917-231ef9acce48?w=300, https://images.unsplash.com/photo-1516315720917-231ef9acce48?w=300 1.5x, https://images.unsplash.com/photo-1516315720917-231ef9acce48?w=300 2x"
 data-sizes="auto"
 alt="https://images.unsplash.com/photo-1516315720917-231ef9acce48?w=300"
 title="课程图片" />&lt;/p></description></item><item><title>3. 数字和计算</title><link>https://itest2025.pages.dev/tutorials/28-003-3-%E6%95%B0%E5%AD%97%E5%92%8C%E8%AE%A1%E7%AE%97/</link><pubDate>Sun, 05 Nov 2017 08:17:22 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/28-003-3-%E6%95%B0%E5%AD%97%E5%92%8C%E8%AE%A1%E7%AE%97/</guid><description>&lt;h3 id="背景">背景&lt;/h3>
&lt;p>几乎所有的编程语言都支持数学计算。不要认为不是数学高手就不能学习编程，很多时候我们在代码里只会用到非常简单的数学运算，常见的有&lt;/p>
&lt;ul>
&lt;li>+: 加法&lt;/li>
&lt;li>-: 减法&lt;/li>
&lt;li>/: 除法&lt;/li>
&lt;li>*: 乘法&lt;/li>
&lt;li>%: 整除取余&lt;/li>
&lt;li>&amp;lt;: 小于&lt;/li>
&lt;li>
&lt;blockquote>
&lt;p>: 大于&lt;/p>&lt;/blockquote>
&lt;/li>
&lt;li>
&lt;blockquote>
&lt;p>=: 大于等于&lt;/p>&lt;/blockquote>
&lt;/li>
&lt;li>&amp;lt;=: 小于等于&lt;/li>
&lt;/ul>
&lt;p>考虑这样的场景，我们的测试用例一个分布在3个模块(A/B/C)，A模块有30个用例，成功运行27个, B模块有40个用例，全部成功运行，C模块有30个用例全部运行成功，假设每个用例执行一次平均需要5分钟，打印出一些测试报告的明细。&lt;/p>
&lt;h3 id="代码实现">代码实现&lt;/h3>
&lt;p>新建名为&lt;code>report_with_math.py&lt;/code>，内容如下&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 打印出本次测试的测试结果&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># A: 27/30 B: 40/40 C: 30/30&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;本次测试覆盖了3个模块&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;测试用例总数为: &amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">40&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">30&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;执行的测试用例总数为: &amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">40&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">30&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;用例最多的模块是B模块，B模块比A模块多出的用例数为&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">40&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">30&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;A模块执行成功27个用例，执行失败的用例数为&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">27&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;B模块的用例全部执行通过， 通过率为百分之&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">40&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="mi">40&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;C模块的用例全部执行通过， 通过率为百分之&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">30&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="mi">30&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;B模块的用例比C模块多吗?&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">40&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">30&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;A模块的用例比C模块多吗?&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">30&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;B模块的用例比C模块少吗?&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">40&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="mi">30&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 结束打印&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;回归不通过&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="运行">运行&lt;/h3>
&lt;p>在命令行中使用下面的命令去执行代码&lt;/p>
&lt;pre tabindex="0">&lt;code>python report_with_math.py
&lt;/code>&lt;/pre>&lt;h3 id="你应该可以看到">你应该可以看到&lt;/h3>
&lt;p>如果没有出错的话，你应该可以看到命令行窗口显示如下的内容&lt;/p>
&lt;pre tabindex="0">&lt;code>本次测试覆盖了3个模块
测试用例总数为: 100
执行的测试用例总数为: 100
用例最多的模块是B模块，B模块比A模块多出的用例数为 10
A模块执行成功27个用例，执行失败的用例数为 3
B模块的用例全部执行通过， 通过率为百分之 100.0
C模块的用例全部执行通过， 通过率为百分之 100.0
B模块的用例比C模块多吗? True
A模块的用例比C模块多吗? False
B模块的用例比C模块少吗? False
回归不通过
&lt;/code>&lt;/pre>&lt;h3 id="动手时间">动手时间&lt;/h3>
&lt;ul>
&lt;li>在每一行上面用#加上注释，解释一下这行代码的作用&lt;/li>
&lt;li>找一些自己需要计算的东西，比如早餐吃3个包子才能吃饱，每个包子3块钱，那么早餐要花多少钱才能吃饱。建立.py文件去计算并执行&lt;/li>
&lt;li>算一下模块A的通过率，找资料了解一下python的浮点数(float)类型，模块A的通过率的预期结果应该是0.9&lt;/li>
&lt;/ul>
&lt;h3 id="常见问题">常见问题&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>%号是怎么工作的&lt;/strong>: 取余数，比如 15 % 4 的结果是3, 16 % 4的结果是0；&lt;/li>
&lt;li>&lt;strong>运算符号的优先级是怎么样的&lt;/strong>: 跟我们小时候学习的四则混合运算一样，乘除优先于加减，有括号的话括号优先，把握不准的情况下，把需要优先计算的部分用括号括起来;&lt;/li>
&lt;/ul>
&lt;p>原始封面&lt;/p></description></item><item><title>4. 变量和名称</title><link>https://itest2025.pages.dev/tutorials/28-004-4-%E5%8F%98%E9%87%8F%E5%92%8C%E5%90%8D%E7%A7%B0/</link><pubDate>Sat, 04 Nov 2017 08:17:22 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/28-004-4-%E5%8F%98%E9%87%8F%E5%92%8C%E5%90%8D%E7%A7%B0/</guid><description>&lt;h3 id="背景">背景&lt;/h3>
&lt;p>变量是编程语言中常见的概念。变量实际上很简单，我们可以把它想象成是一个盒子，这个盒子有名字，就是变量名，盒子里面可以放东西进去，就是变量的值。&lt;/p>
&lt;p>程序员们一般使用变量让代码变得更加容易理解，因为他们的记忆力很糟糕，所以如果不取一些有意义的变量名的话，他们后来可能就看不懂自己写的代码了。&lt;/p>
&lt;p>我们对上一节的内容稍微做一些修改，加入变量的实践。&lt;/p>
&lt;h3 id="代码实现">代码实现&lt;/h3>
&lt;p>新建名为&lt;code>report_with_var.py&lt;/code>，内容如下&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 打印出本次测试的测试结果&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># A: 27/30 B: 40/40 C: 30/30&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">module_count&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">case_count_of_module_a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mf">30.0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">success_case_count_of_module_a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">27&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">case_count_of_module_b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mf">40.0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">success_case_count_of_module_b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">40&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">case_count_of_module_c&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mf">30.0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">success_case_count_of_module_c&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">30&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;本次测试覆盖了&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">module_count&lt;/span> &lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;个模块&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;测试用例总数为: &amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">case_count_of_module_a&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">case_count_of_module_b&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">case_count_of_module_c&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;执行的测试用例总数为: &amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">case_count_of_module_a&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">case_count_of_module_b&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">case_count_of_module_c&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;用例最多的模块是B模块，B模块比A模块多出的用例数为&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">case_count_of_module_b&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">case_count_of_module_a&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;A模块执行成功&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">success_case_count_of_module_a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;个用例，执行失败的用例数为&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">case_count_of_module_a&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">success_case_count_of_module_a&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;A模块用例通过率为百分之&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">success_case_count_of_module_a&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="n">case_count_of_module_a&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;B模块的用例全部执行通过， 通过率为百分之&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">success_case_count_of_module_b&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="n">case_count_of_module_b&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;C模块的用例全部执行通过， 通过率为百分之&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">success_case_count_of_module_b&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="n">case_count_of_module_b&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;B模块的用例比C模块多吗?&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">case_count_of_module_b&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">case_count_of_module_c&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;A模块的用例比C模块多吗?&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">case_count_of_module_a&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">case_count_of_module_c&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;B模块的用例比C模块少吗?&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">case_count_of_module_b&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">case_count_of_module_c&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 结束打印&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;回归不通过&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="运行">运行&lt;/h3>
&lt;p>在命令行中使用下面的命令去执行代码&lt;/p>
&lt;pre tabindex="0">&lt;code>$python report_with_var.py
&lt;/code>&lt;/pre>&lt;h3 id="你应该可以看到">你应该可以看到&lt;/h3>
&lt;p>如果没有出错的话，你应该可以看到命令行窗口显示如下的内容&lt;/p>
&lt;pre tabindex="0">&lt;code>本次测试覆盖了 3 个模块
测试用例总数为: 100.0
执行的测试用例总数为: 100.0
用例最多的模块是B模块，B模块比A模块多出的用例数为 10.0
A模块执行成功 27 个用例，执行失败的用例数为 3.0
A模块用例通过率为百分之 90.0
B模块的用例全部执行通过， 通过率为百分之 100.0
C模块的用例全部执行通过， 通过率为百分之 100.0
B模块的用例比C模块多吗? True
A模块的用例比C模块多吗? False
B模块的用例比C模块少吗? False
回归不通过
&lt;/code>&lt;/pre>&lt;h3 id="动手时间">动手时间&lt;/h3>
&lt;p>刚开始写代码的时候，我们经常会敲错，比如&lt;/p></description></item><item><title>5. 字符串和文本</title><link>https://itest2025.pages.dev/tutorials/28-005-5-%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%92%8C%E6%96%87%E6%9C%AC/</link><pubDate>Fri, 03 Nov 2017 08:17:22 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/28-005-5-%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%92%8C%E6%96%87%E6%9C%AC/</guid><description>&lt;h3 id="什么是字符串">什么是字符串&lt;/h3>
&lt;p>目前为止我们已经打印了不少的字符串了。那么什么是字符串呢?&lt;/p>
&lt;p>在python里，字符串往往表现为用单引号&lt;code>''&lt;/code>或者是双引号&lt;code>&amp;quot;&amp;quot;&lt;/code>包裹起来的一些文字。这些文字便于人类阅读，往往可以展示给我们程序的用户阅读。&lt;/p>
&lt;p>下面代码里s1,s2都是字符串。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">s1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;本次测试覆盖了100个模块&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">s2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;本次测试运行了100个用例&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="f-string">f-string&lt;/h3>
&lt;p>我们经常需要在字符串中包含一些变量，这样可以让字符串变得更加动态，不同变量的取值可以生成不同的字符串。&lt;/p>
&lt;p>python 3.6 之后引入了f-string的概念，可以非常方便的在字符串中包含变量。比如下面的例子。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">module_count&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;本次测试覆盖了&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">module_count&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">个模块&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>另外python还支持.format()语法，我们后面通过代码去理解&lt;/p>
&lt;h3 id="背景">背景&lt;/h3>
&lt;p>这一节里，我们把上一节的内容使用f-string来重新实现一下，逻辑和输出保持不变，用开发领域的术语来说，叫做&amp;quot;重构&amp;quot;。&lt;/p>
&lt;h3 id="代码实现">代码实现&lt;/h3>
&lt;p>新建名为&lt;code>report_with_f_string.py&lt;/code>，内容如下&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 打印出本次测试的测试结果&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># A: 27/30 B: 40/40 C: 30/30&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">module_count&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">case_count_of_module_a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mf">30.0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">success_case_count_of_module_a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">27&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">case_count_of_module_b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mf">40.0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">success_case_count_of_module_b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">40&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">case_count_of_module_c&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mf">30.0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">success_case_count_of_module_c&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">30&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;本次测试覆盖了&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">module_count&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">个模块&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;测试用例总数为: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">case_count_of_module_a&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">case_count_of_module_b&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">case_count_of_module_c&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;执行的测试用例总数为: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">case_count_of_module_a&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">case_count_of_module_b&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">case_count_of_module_c&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;用例最多的模块是B模块，B模块比A模块多出的用例数为: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">case_count_of_module_b&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">case_count_of_module_a&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;A模块执行成功&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">success_case_count_of_module_a&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">个用例，执行失败的用例数为&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">case_count_of_module_a&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">success_case_count_of_module_a&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;A模块用例通过率为百分之&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">success_case_count_of_module_a&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="n">case_count_of_module_a&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;B模块的用例全部执行通过， 通过率为百分之&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="n">success_case_count_of_module_b&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="n">case_count_of_module_b&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;C模块的用例全部执行通过， 通过率为百分之&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="n">success_case_count_of_module_b&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="n">case_count_of_module_b&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">test_type&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;回归测试&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">test_result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;不通过&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 结束打印&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">test_type&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">test_result&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="运行">运行&lt;/h3>
&lt;p>在命令行中使用下面的命令去执行代码&lt;/p>
&lt;pre tabindex="0">&lt;code>$python report_with_f_string.py
&lt;/code>&lt;/pre>&lt;h3 id="你应该可以看到">你应该可以看到&lt;/h3>
&lt;p>如果没有出错的话，你应该可以看到命令行窗口显示如下的内容&lt;/p>
&lt;pre tabindex="0">&lt;code>本次测试覆盖了3个模块
测试用例总数为: 100.0
执行的测试用例总数为: 100.0
用例最多的模块是B模块，B模块比A模块多出的用例数为: 10.0
A模块执行成功27个用例，执行失败的用例数为3.0
A模块用例通过率为百分之90.0
B模块的用例全部执行通过， 通过率为百分之100.0
C模块的用例全部执行通过， 通过率为百分之100.0
回归测试不通过
&lt;/code>&lt;/pre>&lt;h3 id="常见问题">常见问题&lt;/h3>
&lt;ul>
&lt;li>为什么有时候字符串用单引号有时候又用双引号？ 一般情况下用双引号就足够了，不过有时候我们需要打印出单引号，这时候把单引号放到双引号内就可以了,反之亦然。&lt;/li>
&lt;/ul>
&lt;p>原始封面&lt;/p></description></item><item><title>6. 转义序列和多行文本</title><link>https://itest2025.pages.dev/tutorials/28-006-6-%E8%BD%AC%E4%B9%89%E5%BA%8F%E5%88%97%E5%92%8C%E5%A4%9A%E8%A1%8C%E6%96%87%E6%9C%AC/</link><pubDate>Thu, 02 Nov 2017 08:17:22 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/28-006-6-%E8%BD%AC%E4%B9%89%E5%BA%8F%E5%88%97%E5%92%8C%E5%A4%9A%E8%A1%8C%E6%96%87%E6%9C%AC/</guid><description>&lt;h3 id="转义序列">转义序列&lt;/h3>
&lt;p>python提供了一种方式让我们可以输入一些不太好通过键盘输入的字符，比如换行符缩进符之类的。这种特殊的字符组合我们可以称之为转义序列(escape sequences)，详情可以参考&lt;a href="https://docs.python.org/3/reference/lexical_analysis.html" target="_blank" rel="noopener noreffer ">官方文档&lt;/a>。&lt;/p>
&lt;p>我们经常使用的有&lt;/p>
&lt;ul>
&lt;li>\n: 换行&lt;/li>
&lt;li>\t: tab，可以当成是缩进&lt;/li>
&lt;li>\: 反斜杠&lt;/li>
&lt;li>': 单引号，可以在单引号字符串中打印出单引号&lt;/li>
&lt;li>&amp;quot;: 双引号，可以在双引号字符串中打印出双引号&lt;/li>
&lt;/ul>
&lt;h3 id="多行文本">多行文本&lt;/h3>
&lt;p>python中3个引号开头的字符串中可以包含多行文本，比如&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">my_str&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">this is the first line
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">this is the second line
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">this is the last line
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="背景">背景&lt;/h3>
&lt;p>这一节里，我们强化一下转义序列和多行文本的使用和写法。&lt;/p>
&lt;h3 id="代码实现">代码实现&lt;/h3>
&lt;p>新建名为&lt;code>print_test_case.py&lt;/code>，内容如下&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">test_scenario&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;登录场景&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">test_case_name&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\t&lt;/span>&lt;span class="s2">正常登录: &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># two tabs&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">tt&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\t\t&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">test_step&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">tt&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">1.打开chrome浏览器&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">tt&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">2.输入www.itest.info&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">tt&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">3.在登录表单中输入用户名:example，密码:example&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">tt&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">4.登记登录按钮&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">test_assert&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">tt&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">应该跳转到www.itest.info/login_success页面，并出现&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">登录成功&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">的提示&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">test_scenario&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">test_case_name&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">test_step&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">test_assert&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">test_login_failed&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 密码错误:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 1.打开chrome浏览器
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 2.输入www.itest.info
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 3.在登录表单中输入用户名:example，密码:incorrect
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 4.登记登录按钮
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 页面不发生跳转，并出现&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">登录失败&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">的提示
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">test_login_failed&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="运行">运行&lt;/h3>
&lt;p>在命令行中使用下面的命令去执行代码&lt;/p></description></item><item><title>7. 获取用户输入</title><link>https://itest2025.pages.dev/tutorials/28-007-7-%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E8%BE%93%E5%85%A5/</link><pubDate>Wed, 01 Nov 2017 08:17:22 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/28-007-7-%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E8%BE%93%E5%85%A5/</guid><description>&lt;h3 id="获取用户的输入">获取用户的输入&lt;/h3>
&lt;p>大部分的软件可能都需要接收用户的输入，比如&lt;/p>
&lt;ul>
&lt;li>登录的功能，需要用户输入用户名密码之类&lt;/li>
&lt;li>发微信，需要用户输入发送的信息&lt;/li>
&lt;li>美化图片，需要用户选择滤镜等&lt;/li>
&lt;/ul>
&lt;p>这一节里我们将学习怎么从命令行里获取用户的输入。&lt;/p>
&lt;p>在python里，我们可以简单的使用&lt;code>input()&lt;/code>函数来获取用户输入的信息，并保存在变量里。&lt;/p>
&lt;p>在调用&lt;code>input(message)&lt;/code>函数时，我们可以在命令行将message打印出来展示给用户。&lt;/p>
&lt;h3 id="背景">背景&lt;/h3>
&lt;p>我们实现个简单的用例生成器，通过提示用户输入用例的相应部分，最后组合成1个完整的用例。&lt;/p>
&lt;h3 id="代码实现">代码实现&lt;/h3>
&lt;p>新建名为&lt;code>gen_test_case.py&lt;/code>，内容如下&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">case_name&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;请输入用例名称:&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">test_data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;请输入用到的测试数据，比如: 测试站点=www.itest.info:&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">test_steps&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;请输入测试步骤:&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">test_assert&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;请输入测试断言(预期结果):&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">formatter&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">用例名称: &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">测试数据: &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">测试步骤: &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">测试断言: &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">formatter&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">case_name&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">test_data&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">test_steps&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">test_assert&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="运行">运行&lt;/h3>
&lt;p>在命令行中使用下面的命令去执行代码&lt;/p>
&lt;pre tabindex="0">&lt;code>$python gen_test_case.py
&lt;/code>&lt;/pre>&lt;h3 id="你应该可以看到">你应该可以看到&lt;/h3>
&lt;p>按照下面展示的情况进行输入，如果没有出错的话，你应该可以看到命令行窗口显示如下的内容&lt;/p>
&lt;pre tabindex="0">&lt;code>请输入用例名称:
正常登录
请输入用到的测试数据，比如: 测试站点=www.itest.info:
用户名=example;密码=example
请输入测试步骤:
略
请输入测试断言(预期结果):
测试断言: 应该跳转到www.itest.info/login_success页面，并出现&amp;#34;登录成功&amp;#34;的提示

用例名称: 正常登录
测试数据: 用户名=example;密码=example
测试步骤: 略
测试断言: 测试断言: 应该跳转到www.itest.info/login_success页面，并出现&amp;#34;登录成功&amp;#34;的提示
&lt;/code>&lt;/pre>&lt;h3 id="动手时间">动手时间&lt;/h3>
&lt;ul>
&lt;li>在命令行里输入&lt;code>python -m pydoc input&lt;/code>，看一下输出的结果是什么&lt;/li>
&lt;li>在查看pydoc的时候，按&lt;code>q&lt;/code>可以退出&lt;/li>
&lt;li>去网络上搜索一下pydoc的作用是什么&lt;/li>
&lt;li>使用pydoc去了解一下open, file, os和sys的作用&lt;/li>
&lt;/ul>
&lt;p>原始封面&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="https://images.unsplash.com/photo-1573164574511-73c773193279?w=300"
 data-srcset="https://images.unsplash.com/photo-1573164574511-73c773193279?w=300, https://images.unsplash.com/photo-1573164574511-73c773193279?w=300 1.5x, https://images.unsplash.com/photo-1573164574511-73c773193279?w=300 2x"
 data-sizes="auto"
 alt="https://images.unsplash.com/photo-1573164574511-73c773193279?w=300"
 title="课程图片" />&lt;/p></description></item><item><title>8. 命令行参数与unpack</title><link>https://itest2025.pages.dev/tutorials/28-008-8-%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E4%B8%8Eunpack/</link><pubDate>Tue, 31 Oct 2017 08:17:22 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/28-008-8-%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E4%B8%8Eunpack/</guid><description>&lt;h3 id="背景">背景&lt;/h3>
&lt;p>我们先稍微的修改一下上一节的用例生成器，加入接收命令行参数的功能。&lt;/p>
&lt;p>作为测试用例的执行者，我们希望在创建用例的时候可以指定用例编号，以便能够更加系统的管理测试用例。&lt;/p>
&lt;h3 id="代码实现">代码实现&lt;/h3>
&lt;p>新建名为&lt;code>gen_test_case_with_id.py&lt;/code>，内容如下&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">sys&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">argv&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">script&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">case_id&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">argv&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;创建测试用例&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">用例编号: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">case_id&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">case_name&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;请输入用例名称:&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">test_data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;请输入用到的测试数据，比如: 测试站点=www.itest.info:&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">test_steps&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;请输入测试步骤:&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">test_assert&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;请输入测试断言(预期结果):&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">formatter&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">用例编号: &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">用例名称: &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">测试数据: &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">测试步骤: &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">测试断言: &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">formatter&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">case_id&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">case_name&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">test_data&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">test_steps&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">test_assert&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="运行">运行&lt;/h3>
&lt;p>在命令行中使用下面的命令去执行代码&lt;/p>
&lt;pre tabindex="0">&lt;code>$python gen_test_case_with_id.py itest_001
&lt;/code>&lt;/pre>&lt;p>&lt;strong>注意： 我们在脚本名称后面加上了itest_001，这就是我们指定的用例编号，千万不要忘记传入这个参数，否则代码将会报如下的错误&lt;/strong>&lt;/p>
&lt;pre tabindex="0">&lt;code>Traceback (most recent call last):
 File &amp;#34;gen_test_case_with_id.py&amp;#34;, line 3, in &amp;lt;module&amp;gt;
 script, case_id = argv
ValueError: not enough values to unpack (expected 2, got 1)
&lt;/code>&lt;/pre>&lt;h3 id="你应该可以看到">你应该可以看到&lt;/h3>
&lt;p>按照下面展示的情况进行输入，如果没有出错的话，你应该可以看到命令行窗口显示如下的内容&lt;/p>
&lt;pre tabindex="0">&lt;code>创建测试用例
用例编号: itest_001
请输入用例名称:
登录成功
请输入用到的测试数据，比如: 测试站点=www.itest.info:
无
请输入测试步骤:
略
请输入测试断言(预期结果):
跳转到www.itest.info

用例编号: itest_001
用例名称: 登录成功
测试数据: 无
测试步骤: 略
测试断言: 跳转到www.itest.info
&lt;/code>&lt;/pre>&lt;h3 id="import">import&lt;/h3>
&lt;p>python给我们预置了很多常用的功能，这些功能以module的形式组织起来，使用&lt;code>import&lt;/code>关键字就可以把我们需要的内容导入进来，从而在脚本里使用。&lt;/p></description></item><item><title>9. 读取文件</title><link>https://itest2025.pages.dev/tutorials/28-009-9-%E8%AF%BB%E5%8F%96%E6%96%87%E4%BB%B6/</link><pubDate>Mon, 30 Oct 2017 08:17:22 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/28-009-9-%E8%AF%BB%E5%8F%96%E6%96%87%E4%BB%B6/</guid><description>&lt;h3 id="背景">背景&lt;/h3>
&lt;p>这一节里我们来学习如何使用python来读取文本文件中的内容。&lt;/p>
&lt;p>我们将实现一个简单的读取测试用例文件的脚本，脚本运行时候接收1个参数，用来指定需要读取的用例文件。&lt;/p>
&lt;h3 id="创建用例文件">创建用例文件&lt;/h3>
&lt;p>新建名为&lt;code>case001.txt&lt;/code>的文本文件，内容如下:&lt;/p>
&lt;pre tabindex="0">&lt;code>用例编号: itest001
用例名称: 登录成功
测试数据: 用户名:example;密码:example
测试步骤: 略
测试断言: 应该可以正确跳转到www.itest.info
&lt;/code>&lt;/pre>&lt;h3 id="代码实现">代码实现&lt;/h3>
&lt;p>新建名为&lt;code>read_case.py&lt;/code>，内容如下&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">sys&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">argv&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">script&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">file_path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">argv&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;读取文件: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">file_path&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">file_obj&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">file_path&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">file_obj&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">file_obj&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">close&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="运行">运行&lt;/h3>
&lt;p>在命令行中使用下面的命令去执行代码&lt;/p>
&lt;pre tabindex="0">&lt;code>$python read_case.py case001.txt
&lt;/code>&lt;/pre>&lt;p>&lt;strong>注意：请确保先创建了用例文件case001.txt&lt;/strong>&lt;/p>
&lt;p>&lt;strong>注意：请确保用例文件case001.txt跟脚本文件read_case.py在同一个文件目录下&lt;/strong>&lt;/p>
&lt;p>&lt;strong>注意： 我们在脚本名称后面加上了case001.txt，这就是我们指定的用例文件名称，千万不要忘记传入这个参数，否则代码将会报如下的错误&lt;/strong>&lt;/p>
&lt;pre tabindex="0">&lt;code>Traceback (most recent call last):
 File &amp;#34;read_case.py&amp;#34;, line 3, in &amp;lt;module&amp;gt;
 script, file_path = argv
ValueError: not enough values to unpack (expected 2, got 1)
&lt;/code>&lt;/pre>&lt;h3 id="你应该可以看到">你应该可以看到&lt;/h3>
&lt;p>按照下面展示的情况进行输入，如果没有出错的话，你应该可以看到命令行窗口显示如下的内容&lt;/p>
&lt;pre tabindex="0">&lt;code>读取文件: case001.txt

用例编号: itest001
用例名称: 登录成功
测试数据: 用户名:example;密码:example
测试步骤: 略
测试断言: 应该可以正确跳转到www.itest.info
&lt;/code>&lt;/pre>&lt;h3 id="常见问题">常见问题&lt;/h3>
&lt;p>&lt;code>file_obj = open(file_path)&lt;/code> 这一行中，file_obj究竟是什么？&lt;/p></description></item><item><title>10. 写文件</title><link>https://itest2025.pages.dev/tutorials/28-010-10-%E5%86%99%E6%96%87%E4%BB%B6/</link><pubDate>Sat, 01 Jul 2017 08:17:22 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/28-010-10-%E5%86%99%E6%96%87%E4%BB%B6/</guid><description>&lt;h3 id="背景">背景&lt;/h3>
&lt;p>这一节里我们来学习如何使用python向文本文件中写入的内容。&lt;/p>
&lt;p>我们将实现一个简单的创建测试用例文件的脚本，脚本运行时候接收3个参数，分别是&lt;/p>
&lt;ul>
&lt;li>用例编号&lt;/li>
&lt;li>用例名称&lt;/li>
&lt;li>断言&lt;/li>
&lt;/ul>
&lt;p>这里我们忽略写入测试步骤，这&lt;strong>并不表示编写用例时可以忽略测试步骤&lt;/strong>&lt;/p>
&lt;h3 id="代码实现">代码实现&lt;/h3>
&lt;p>新建名为&lt;code>write_case.py&lt;/code>，内容如下&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">sys&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">argv&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">script&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">case_number&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">case_name&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">assertion&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">argv&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">file_name&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;case002.txt&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;用例编号: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">case_number&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;用例名称: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">case_name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;断言: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">assertion&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">target&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">file_name&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;w&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Truncating the file. Goodbye!&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;write file: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">file_name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">target&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;用例编号: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">case_number&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">target&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">target&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;用例名称: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">case_name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">target&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">target&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;断言: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">assertion&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">target&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">target&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">close&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="运行">运行&lt;/h3>
&lt;p>在命令行中使用下面的命令去执行代码&lt;/p>
&lt;pre tabindex="0">&lt;code>$ python write_case.py 002 Get接口测试 接口返回的状态码必须是200
&lt;/code>&lt;/pre>&lt;h3 id="你应该可以看到">你应该可以看到&lt;/h3>
&lt;p>按照下面展示的情况进行输入，如果没有出错的话，你应该可以看到命令行窗口显示如下的内容&lt;/p>
&lt;pre tabindex="0">&lt;code>用例编号: 002
用例名称: Get接口测试
断言: 接口返回的状态码必须是200
Truncating the file. Goodbye!
write file: case002.txt
&lt;/code>&lt;/pre>&lt;p>这时候当前文件夹会出现case002.txt文件，内容应该如下所示&lt;/p>
&lt;pre tabindex="0">&lt;code>用例编号: 002
用例名称: Get接口测试
断言: 接口返回的状态码必须是200
&lt;/code>&lt;/pre>&lt;h3 id="关于文件操作">关于文件操作&lt;/h3>
&lt;p>关于文件的操作，请试着自己写代码去调用下面的方法，实践出真知。&lt;/p></description></item><item><title>11. 函数</title><link>https://itest2025.pages.dev/tutorials/28-011-11-%E5%87%BD%E6%95%B0/</link><pubDate>Thu, 29 Jun 2017 08:17:22 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/28-011-11-%E5%87%BD%E6%95%B0/</guid><description>&lt;h3 id="背景">背景&lt;/h3>
&lt;p>这一节里我们来了解一下什么是函数。&lt;/p>
&lt;p>简单来说函数就是一段代码，只不过这段代码有名字，可能有输入和输出，我们可以使用函数的名字反复去调用这段代码。&lt;/p>
&lt;p>函数主要做了下面3件事情&lt;/p>
&lt;ul>
&lt;li>给一段代码命名，就像是我们之前给字符串和数字取个变量名一样&lt;/li>
&lt;li>可以像之前我们在调用脚本时使用&lt;code>argv&lt;/code>一样的使用传入参数&lt;/li>
&lt;li>把上面2步结合起来，我们可以创建一些重复使用的脚本❤️&lt;/li>
&lt;/ul>
&lt;p>下面我们演示一下如何定义函数和调用函数&lt;/p>
&lt;h3 id="代码实现">代码实现&lt;/h3>
&lt;p>新建名为&lt;code>print_case.py&lt;/code>，内容如下&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># *args跟之前argv差不多&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">print_case&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="n">args&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">case_number&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">case_name&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">args&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;用例编号: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">case_number&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;用例名称: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">case_name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2个参数&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">print_case_again&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">case_number&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">case_name&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;用例编号: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">case_number&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;用例名称: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">case_name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1个参数&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">print_delimiter&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">delimiter&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">delimiter&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">20&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 没有参数&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">print_end&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;打印结束&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">print_case&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;001&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;验证GET请求的返回状态码&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">print_delimiter&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;*&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">print_case_again&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;002&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;验证GET请求的返回值&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">print_delimiter&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;*&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">print_end&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>详细的看一下&lt;code>print_case()&lt;/code>函数。&lt;/p>
&lt;ul>
&lt;li>首先我们告诉python，我们需要定义一个函数，约定好的关键字是&lt;code>def&lt;/code>，也就是define的意思&lt;/li>
&lt;li>然后我们为这个函数取个名字print_case，当然了，如果你觉得这个名字不好，你也可以换一个，不过我们一般在给函数取名的时候都是言简意赅的去表明这个函数到底是要做什么&lt;/li>
&lt;li>然后我们告诉python，我们需要传入*args，就像是使用&lt;code>argv&lt;/code>一样。*args就是函数的参数，需要放在一对小括号里&lt;code>()&lt;/code>&lt;/li>
&lt;li>在这一行的结束位置，不要忘了加个&lt;code>:&lt;/code>冒号，表示引出下面的函数正文&lt;/li>
&lt;li>另起一行，不要忘了缩进，就像使用&lt;code>argv&lt;/code>一样，取出用例编号和名称&lt;/li>
&lt;li>最后打印出用例名称和编号&lt;/li>
&lt;/ul>
&lt;h3 id="运行">运行&lt;/h3>
&lt;p>在命令行中使用下面的命令去执行代码&lt;/p>
&lt;pre tabindex="0">&lt;code>$ python print_case.py
&lt;/code>&lt;/pre>&lt;h3 id="你应该可以看到">你应该可以看到&lt;/h3>
&lt;p>按照下面展示的情况进行输入，如果没有出错的话，你应该可以看到命令行窗口显示如下的内容&lt;/p>
&lt;pre tabindex="0">&lt;code>用例编号: 001
用例名称: 验证GET请求的返回状态码
********************
用例编号: 002
用例名称: 验证GET请求的返回值
********************
打印结束
&lt;/code>&lt;/pre>&lt;h3 id="动手时间">动手时间&lt;/h3>
&lt;ul>
&lt;li>给代码增加注释，解释一下这段代码做了些什么&lt;/li>
&lt;li>函数的调用是什么意思？你能解释一下么？&lt;/li>
&lt;li>函数的参数是什么意思？你能解释一下么？&lt;/li>
&lt;li>缩进是什么？python中的强制缩进又是什么意思？&lt;/li>
&lt;/ul>
&lt;h3 id="常见问题">常见问题&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>给函数命名的时候，是不是任意的名字都可以？ 一般来说是这样的，跟变量名类似，函数名不能以数字开头，并且一般只能包含字母数字和下划线。&lt;/p></description></item><item><title>12. 函数与变量</title><link>https://itest2025.pages.dev/tutorials/28-012-12-%E5%87%BD%E6%95%B0%E4%B8%8E%E5%8F%98%E9%87%8F/</link><pubDate>Wed, 28 Jun 2017 08:17:22 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/28-012-12-%E5%87%BD%E6%95%B0%E4%B8%8E%E5%8F%98%E9%87%8F/</guid><description>&lt;h3 id="背景">背景&lt;/h3>
&lt;p>对于初学者来说函数的概念比较的烧脑，刚开始理解起来会各种困难，不过没关系，继续多多练习，习惯之后就不会有太多问题了。&lt;/p>
&lt;p>这一节里我们解决一个小问题，就是函数里的变量名和函数外的变量名是不是会冲突的问题。&lt;/p>
&lt;p>结论是不冲突，下面我们演示一下具体情况。&lt;/p>
&lt;h3 id="代码实现">代码实现&lt;/h3>
&lt;p>新建名为&lt;code>print_case01.py&lt;/code>，内容如下&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">print_case_count&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">success&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">failed&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">total_count&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">success&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">failed&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;一共&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">total_count&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">个用例, 成功&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">success&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">个, 失败&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">failed&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">个&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">print_end&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;打印结束&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;第一次运行&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">print_case_count&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">95&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;第二次运行&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">success&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">101&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">failed&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">print_case_count&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">success&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">failed&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;第三次运行&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">total&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">100&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">failed&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">print_case_count&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">total&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">failed&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">failed&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">print_end&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>上面的代码说明了一些问题&lt;/p>
&lt;ul>
&lt;li>函数调用有很多的方式，传参的时候我们可以直接传值，传变量，甚至是合法的表达式(&lt;code>total - failed&lt;/code>)&lt;/li>
&lt;li>函数外的变量名不会影响函数内的，另一种说法是我们可以在函数内用函数外相同的变量名&lt;/li>
&lt;/ul>
&lt;h3 id="运行">运行&lt;/h3>
&lt;p>在命令行中使用下面的命令去执行代码&lt;/p>
&lt;pre tabindex="0">&lt;code>$ python print_case01.py
&lt;/code>&lt;/pre>&lt;h3 id="你应该可以看到">你应该可以看到&lt;/h3>
&lt;p>按照下面展示的情况进行输入，如果没有出错的话，你应该可以看到命令行窗口显示如下的内容&lt;/p>
&lt;pre tabindex="0">&lt;code>第一次运行 
一共100个用例, 成功95个, 失败5个 
第二次运行 
一共101个用例, 成功101个, 失败0个 
第三次运行 
一共100个用例, 成功93个, 失败7个 
打印结束 
&lt;/code>&lt;/pre>&lt;h3 id="动手时间">动手时间&lt;/h3>
&lt;ul>
&lt;li>修改&lt;code>print_case_count()&lt;/code>函数，使其可以输出用例的通过率&lt;/li>
&lt;li>自行去了解一下python中变量的作用域，推荐搜索关键字&lt;strong>python variable scope&lt;/strong>&lt;/li>
&lt;li>自行去了解什么是全局变量，什么是局部变量&lt;/li>
&lt;/ul>
&lt;h3 id="常见问题">常见问题&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>为什么搜索的时候推荐英文关键字？ 英文关键字可以使我们找到第一手官方的解释，准确性更高。另外阅读一些英文文档也不是啥坏事。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>怎么去计算用例的通过率？ 公式大概是&lt;code>success_count / total_count&lt;/code>，注意算出来的结果应该是浮点型&lt;/p>
&lt;/li>
&lt;li>
&lt;p>什么是浮点型？ 简单理解为带有小数位的数，如果你对这个答案不满意，你可以看一下&lt;a href="https://en.wikipedia.org/wiki/Floating-point_arithmetic" target="_blank" rel="noopener noreffer ">这里&lt;/a>&lt;/p></description></item><item><title>13. 函数与文件</title><link>https://itest2025.pages.dev/tutorials/28-013-13-%E5%87%BD%E6%95%B0%E4%B8%8E%E6%96%87%E4%BB%B6/</link><pubDate>Tue, 27 Jun 2017 08:17:22 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/28-013-13-%E5%87%BD%E6%95%B0%E4%B8%8E%E6%96%87%E4%BB%B6/</guid><description>&lt;h3 id="背景">背景&lt;/h3>
&lt;p>继续通过练习来熟悉函数。&lt;/p>
&lt;p>这一节里我们将使用函数和文件的知识来重构第9节中的内容。&lt;/p>
&lt;h3 id="什么是重构">什么是重构&lt;/h3>
&lt;p>重构简单来说就是在不改变原有代码功能的情况下修改先前的代码实现。&lt;/p>
&lt;p>测试同学一般都需要对重构提高警惕，这是因为&lt;/p>
&lt;ul>
&lt;li>重构中如果没有单元测试进行辅助的话，代码可能会隐藏问题&lt;/li>
&lt;li>重构的需求往往安排较少的测试进行回归，测试力度可能不够&lt;/li>
&lt;/ul>
&lt;h3 id="利用已有的用例文件">利用已有的用例文件&lt;/h3>
&lt;p>不出意外你应该拥有名为&lt;code>case001.txt&lt;/code>的文本文件，内容如下:&lt;/p>
&lt;pre tabindex="0">&lt;code>用例编号: itest001
用例名称: 登录成功
测试数据: 用户名:example;密码:example
测试步骤: 略
测试断言: 应该可以正确跳转到www.itest.info
&lt;/code>&lt;/pre>&lt;h3 id="代码实现">代码实现&lt;/h3>
&lt;p>新建名为&lt;code>read_case01.py&lt;/code>的文件，内容如下&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">sys&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">argv&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">script&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">file_path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">argv&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">read_file&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">file_name&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">file_obj&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">file_name&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">file_obj&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">file_obj&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">close&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;读取文件: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">file_path&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">read_file&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">file_path&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="运行">运行&lt;/h3>
&lt;p>在命令行中使用下面的命令去执行代码&lt;/p>
&lt;pre tabindex="0">&lt;code>$ python read_case01.py case001.txt
&lt;/code>&lt;/pre>&lt;h3 id="你应该可以看到">你应该可以看到&lt;/h3>
&lt;p>按照下面展示的情况进行输入，如果没有出错的话，你应该可以看到命令行窗口显示如下的内容&lt;/p>
&lt;pre tabindex="0">&lt;code>读取文件: case001.txt

用例编号: itest001
用例名称: 登录成功
测试数据: 用户名:example;密码:example
测试步骤: 略
测试断言: 应该可以正确跳转到www.itest.info
&lt;/code>&lt;/pre>&lt;h3 id="动手时间">动手时间&lt;/h3>
&lt;ul>
&lt;li>如果要求你不能在&lt;code>read_file&lt;/code>中进行打印，要完成上面的内容，你应该怎么做？&lt;/li>
&lt;li>搜索一下什么是函数的返回值，了解一下基本概念&lt;/li>
&lt;/ul>
&lt;p>原始封面&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="https://images.unsplash.com/photo-1523289333742-be1143f6b766?w=300"
 data-srcset="https://images.unsplash.com/photo-1523289333742-be1143f6b766?w=300, https://images.unsplash.com/photo-1523289333742-be1143f6b766?w=300 1.5x, https://images.unsplash.com/photo-1523289333742-be1143f6b766?w=300 2x"
 data-sizes="auto"
 alt="https://images.unsplash.com/photo-1523289333742-be1143f6b766?w=300"
 title="课程图片" />&lt;/p></description></item><item><title>0.写在前面</title><link>https://itest2025.pages.dev/tutorials/28-000-0%E5%86%99%E5%9C%A8%E5%89%8D%E9%9D%A2/</link><pubDate>Tue, 07 Nov 2017 08:17:22 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/28-000-0%E5%86%99%E5%9C%A8%E5%89%8D%E9%9D%A2/</guid><description>&lt;p>这是为测试同学编写的学习python的一系列教程。&lt;/p>
&lt;p>教程的主旨如下&lt;/p>
&lt;ul>
&lt;li>不要写废话: 尽可能用最简练的篇幅把事情说清楚&lt;/li>
&lt;li>多练多看: 读者应该把教程中代码敲一遍；教程里的示例代码，读者要想办法自己看懂&lt;/li>
&lt;li>尽量使用测试同学可以理解的概念&lt;/li>
&lt;/ul>
&lt;h3 id="python版本">python版本&lt;/h3>
&lt;p>我们使用&lt;strong>python3.6&lt;/strong>以上的版本。&lt;/p>
&lt;h3 id="编辑器">编辑器&lt;/h3>
&lt;p>推荐读者使用&lt;a href="" rel="">vscode&lt;/a>，vscode应该可以在windows及macos上运行。&lt;/p>
&lt;h3 id="命令行工具">命令行工具&lt;/h3>
&lt;p>我们的代码都是通过在命令行中使用&lt;code>python&lt;/code>命令的方式去运行的。&lt;/p>
&lt;ul>
&lt;li>macos可以用自带的terminal工具&lt;/li>
&lt;li>windows系统使用自带的cmd命令行工具和powershell工具就可以了&lt;/li>
&lt;/ul>
&lt;h3 id="学习方法">学习方法&lt;/h3>
&lt;ul>
&lt;li>先把所有代码都敲一遍&lt;/li>
&lt;li>确保你敲的代码都能正确运行&lt;/li>
&lt;li>修改代码，让代码报错，不能运行&lt;/li>
&lt;li>查看报错信息，弄明白代码为什么不能运行&lt;/li>
&lt;li>尽可能多的阅读教程里的示例代码，弄清楚代码是如何工作和实现需求的&lt;/li>
&lt;/ul>
&lt;p>原始封面&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="https://images.unsplash.com/photo-1517059224940-d4af9eec41b7?w=300"
 data-srcset="https://images.unsplash.com/photo-1517059224940-d4af9eec41b7?w=300, https://images.unsplash.com/photo-1517059224940-d4af9eec41b7?w=300 1.5x, https://images.unsplash.com/photo-1517059224940-d4af9eec41b7?w=300 2x"
 data-sizes="auto"
 alt="https://images.unsplash.com/photo-1517059224940-d4af9eec41b7?w=300"
 title="课程图片" />&lt;/p></description></item></channel></rss>