Python  unittest单元测试框架的使用

论坛 期权论坛     
niminba   2021-5-22 14:48   257   0
<p><span style="color: #ff0000"><strong>一、测试模型</strong></span><br>
</p>
<p>下面这部分来自于某书籍资料,拿过来,按需参考一下:</p>
<p><strong>测试模型</strong><br>
</p>
<p><strong>(1)线性测试</strong><br>
</p>
<p>1、概念:<br>
</p>
<p>通过录制或编写对应应用程序的操作步骤产生的线性脚本。单纯的来模拟用户完整的操作场景。(操作,重复操作,数据)都混合在一起。<br>
</p>
<p>2、优点:每个脚本相对独立,且不产生其他依赖和调用。任何一个测试用例脚本拿出来都可以单独执行。<br>
</p>
<p>3、缺点:开发成本高,用例之间存在重复的操作。比如重复的用户登录和退出。<br>
</p>
<p>维护成本高,由于重复的操作,当重复的操作发生改变时,则需要逐一进行脚本的修改。<br>
</p>
<p>4.线性测试实例:用户登录<br>
</p>
<p><strong>(2)模块化驱动测试</strong><br>
</p>
<p>1、概念:<br>
</p>
<p>将重复的操作独立成功共模块,当用例执行过程中需要用到这一模块操作时则被调用。<br>
操作+(重复操作,数据)混合在一起。例如,自动化测试的执行需要保持测试用例的独立性和完整性,所以每一条用例在执行时都需要登录和退出操作,so可以把登录和退出的操作封装为公共函数。<br>
</p>
<p>2、优点:由于最大限度消除了重复,从而提高了开发效率和提高测试用例的可维护性。<br>
</p>
<p>3、缺点:虽然模块化的步骤相同,但是测试数据不同。比如说重复的登录模块,如果登录用户不同,依旧要重复编写登录脚本。<br>
</p>
<p>4.实例:对公共模块,例如登陆和退出进行模块化封装<br>
</p>
<p><strong>(3)数据驱动测试</strong><br>
</p>
<p>1、概念:它将测试中的测试数据和操作分离,数据存放在另外一个文件中单独维护。<br>
</p>
<p>通过数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。<br>
</p>
<p>操作+重复操作+数据分开。<br>
</p>
<p>2、优点:<br>
</p>
<p>通过这种方式,将数据和重复操作分开,可以快速增加相似测试,完成不同数据情况下的测试。<br>
</p>
<p>3、实例从excel表格读取用户名密码,登录邮箱。<br>
</p>
<p><span style="color: #ff0000"><strong>二、unittest框架</strong></span><br>
</p>
<p>用Python搭建自动化测试框架,需要组织用例以及测试执行,大部分推荐的是unittest。现在用的也是这个,随着了解,也有其他的框架,有时间再多去学习,保持持续学习哦~<br>
</p>
<p>附上官方文档地址:链接描述<a href="https://docs.python.org/2.7/library/unittest.html#" rel="external nofollow" target="_blank">https://docs.python.org/2.7/library/unittest.html#</a></p>
<p>unittest是Python自带的单元测试框,可以用来作自动化测试框架的用例组织执行框架。优点:提供用例组织与执行方法;提供比较方法;提供丰富的日志、清晰的报告。<br>
大致流程:</p>
<ul>
  <li>写好TestCase</li>
  <li>由TestLoader加载TestCase到TestSuite</li>
  <li>然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中。</li>
</ul>
<p>通过命令行或者unittest.main()执行时,main会调用TextTestRunner中的run()来执行,或者可以直接通过TextTestRunner来执行用例。<br>
</p>
<p>在Runner执行时,默认将执行结果输出到控制台,我们可以设置其输出到文件,在文件中查看结果。<br>
</p>
<p>unittest中最核心的部分是:TestFixture、TestCase、TestSuite、TestRunner。</p>
<p><strong>1、Test fixture</strong><br>
</p>
<p>用于一个测试环境的准备和销毁还原。<br>
</p>
<p>当测试用例每次执行之前需要准备测试环境,每次测试完成后还原测试环境,比如执行前连接数据库、打开浏览器等,执行完成后需要还原数据库、关闭浏览器等操作。这时候就可以启用testfixture。</p>
<ul>
  <li>setUp():准备环境,执行每个测试用例的前置条件;</li>
  <li>tearDown():环境还原,执行每个测试用例的后置条件;</li>
  <li>setUpClass():必须使用@classmethod装饰器,所有case执行的前置条件,只运行一次;</li>
  <li>tearDownClass():必须使用@classmethod装饰器,所有case运行完后只运行一次;</li>
</ul>
<p>例如:</p>
<div class="blockcode">
<pre class="brush:py;">
# 重写TestCase的setUp() tearDown()方法:在每个测试方法执行前以及执行后各执行一次
def setUp(self): # 钩子方法
print("do something before test : prepare environment")
def tearDown(self): # 钩子方法
print("do something after test : clean up ")
</pre>
</div>
<p><strong>2、TestCase</strong><br>
</p>
<p>类,unittest.TestCase<br>
</p>
<p>一个类class继承 unittest.TestCase,就是一个测试用例。一个TestCase的实例就是一个测试用例,就是一个完整的测试流程。<br>
</p>
<p>包括测试前环境准备setUp()|setUpClass()、执行代码run()、测试
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP