搭耳蚊 發表於 2019-9-8 22:26:00

python操作Excel表格

<h1><span class="md-plain md-expand">一、openpyxl介绍安装</span></h1>
<h2 class="md-end-block md-p"><span class="md-plain">1.为什么要学Excel</span></h2>
<h3 class="md-end-block md-p"><strong><span class="md-plain">存测试数据</span></strong></h3>
<p class="md-end-block md-p"><span class="md-plain">&nbsp; &nbsp; &nbsp; 有时候有大批量的数据,存到TXT文件里面显然不是最佳的方式,我们可以存到Excel里面去,第一方便我们存数据和做数据,另一方面方便我们读取数据,比较明朗。测试的时候就从数据库中读取出来,这点是非常重要的。</span></p>
<h3 class="md-end-block md-p"><strong><span class="md-plain">存测试结果</span></strong></h3>
<p class="md-end-block md-p"><span class="md-plain">可以批量把结果存入到Excel中,也是比较好整理数据点,比我们的TXT要好。</span></p>
<h2><span class="md-plain">2.安装openpyxl</span></h2>
<p class="md-end-block md-p"><span class="md-plain">python中与excel操作相关的模块:</span></p>
<ul>
<li class="md-end-block md-p"><span class="md-plain">xlrd库:从excel中读取数据,支持xls、xlsx</span></li>
<li class="md-end-block md-p"><span class="md-plain">xlwt库:对excel进行修改操作,不支持对xlsx格式的修改</span></li>
<li class="md-end-block md-p"><span class="md-plain">xlutils库:在xlw和xlrd中,对一个已存在的文件进行修改。</span></li>
<li class="md-end-block md-p"><span class="md-plain">openpyxl:主要针对xlsx格式的excel进行读取和编辑。</span></li>
</ul>
<p class="md-end-block md-p"><span class="md-plain">安装方式:</span><strong><span class="md-plain">pip install openpyxl</span></strong></p>
<h2 class="md-end-block md-p"><span class="md-plain">3.Excel中的三大对象</span></h2>
<ul>
<li class="md-end-block md-p"><span class="md-plain">WorkBook:工作簿对象</span></li>
<li class="md-end-block md-p"><span class="md-plain">Sheet:表单对象</span></li>
<li class="md-end-block md-p"><span class="md-plain md-expand">Cell:表格对象</span></li>
</ul>
<h2 class="md-end-block md-p"><span class="md-plain md-expand">二、openpyxl对Excel的操作</span></h2>
<ul>
<li><span style="font-family: 宋体"><span class="md-plain md-expand">创建一个工作薄:wb = openpyxl.Workbook()</span></span></li>
<li><span style="font-family: 宋体"><span class="md-plain md-expand">新增一个sheet表单:wb.create_sheet('test_case')</span></span></li>
<li><span style="font-family: 宋体"><span class="md-plain md-expand">保存case.xlsx文件:wb.save('cases.xlsx')</span></span></li>
<li><span style="font-family: 宋体">打开工作簿:wb = openpyxl.load_workbook('cases.xlsx')</span></li>
<li><span style="font-family: 宋体">选取表单:sh = wb['Sheet1'</span></li>
<li><span style="font-family: 宋体">读取第一行、第一列的数据:ce = sh.cell(row = 1,column = 1)</span></li>
<li><span style="font-family: 宋体">按行读取数据:row_data = list(sh.rows)</span></li>
<li><span style="font-family: 宋体">关闭工作薄:wb.close()</span></li>
<li><span style="font-family: 宋体">按列读取数据:columns_data = list(sh.columns)</span></li>
<li><span style="color: rgba(255, 102, 0, 1)"><strong><span style="font-family: 宋体">写入数据之前,该文件一定要处于关闭状态</span></strong></span></li>
<li><span style="font-family: 宋体">写入第一行、第四列的数据 value = 'result':sh.cell(row = 1,column = 4,value = 'result')</span></li>
<li><span style="font-family: 宋体">获取最大行总数、最大列总数:sh.max_row、sh.max_column</span></li>
<li><span style="font-family: 宋体">del 删除表单的用法:del wb['sheet_name']&nbsp;</span></li>
<li><span style="font-family: 宋体">remove 删除表单的用法:sh = wb['sheet_name'] wb.remove(sh)&nbsp;</span></li>
<li><span style="font-family: 宋体">&nbsp;</span></li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> openpyxl
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 创建一个工作簿</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> wb =<span style="color: rgba(0, 0, 0, 1)"> openpyxl.Workbook()
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 创建一个test_case的sheet表单</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> wb.create_sheet(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">test_case</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 保存为一个xlsx格式的文件</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> wb.save(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">cases.xlsx</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 读取excel中的数据</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 第一步:打开工作簿</span>
<span style="color: rgba(0, 128, 128, 1)">10</span> wb = openpyxl.load_workbook(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">cases.xlsx</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 第二步:选取表单</span>
<span style="color: rgba(0, 128, 128, 1)">12</span> sh = wb[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Sheet1</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">]
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 第三步:读取数据</span>
<span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 参数 row:行column:列</span>
<span style="color: rgba(0, 128, 128, 1)">15</span> ce = sh.cell(row = 1,column = 1)   <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 读取第一行,第一列的数据</span>
<span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(ce.value)
</span><span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 按行读取数据 list(sh.rows)</span>
<span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 255, 1)">print</span>(list(sh.rows))   <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 按行读取数据,去掉第一行的表头信息数据</span>
<span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 255, 1)">for</span> cases <span style="color: rgba(0, 0, 255, 1)">in</span> list(sh.rows):
</span><span style="color: rgba(0, 128, 128, 1)">20</span>   case_id =<span style="color: rgba(0, 0, 0, 1)">cases.value
</span><span style="color: rgba(0, 128, 128, 1)">21</span>   case_excepted = cases.value
</span><span style="color: rgba(0, 128, 128, 1)">22</span>   case_data = cases.value
</span><span style="color: rgba(0, 128, 128, 1)">23</span>   <span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(case_excepted,case_data)
</span><span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 关闭工作薄</span>
<span style="color: rgba(0, 128, 128, 1)">25</span> wb.close()</pre>
</div>
<p>&nbsp;</p>
<h2 class="md-end-block md-p"><span class="md-plain">三.</span><span class="md-plain">封装一个读取用例的excel类:用来实现读取数据和写入数据的功能</span></h2>
<p class="md-end-block md-p md-focus">&nbsp;cases.xlsx的测试数据:</p>
<p class="md-end-block md-p md-focus"><img src="https://img2018.cnblogs.com/blog/1590725/201909/1590725-20190904215341374-796395712.png"></p>
<h3 class="md-end-block md-p">1.按行读取数据,存储在列表中</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> openpyxl
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 255, 1)">class</span> Case: <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">这个类用来存储用例的</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span>   <span style="color: rgba(128, 0, 128, 1)">__slots__</span> = [] <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">特殊的类属性,可以用来限制这个类创建的实例属性添加 可写可不写</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span>   <span style="color: rgba(0, 0, 255, 1)">pass</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 255, 1)">class</span> ReadExcel(object): <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">读取excel数据的类</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span>   <span style="color: rgba(0, 0, 255, 1)">def</span> <span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(self,file_name,sheet_name):
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>         <span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(128, 0, 0, 1)">      这个是用来初始化读取对象的
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(128, 0, 0, 1)">      :param file_name: 文件名 ---&gt; str类型
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(128, 0, 0, 1)">      :param sheet_name: 表单名 ———&gt; str类型
</span><span style="color: rgba(0, 128, 128, 1)">12</span>         <span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 128, 128, 1)">13</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 打开文件</span>
<span style="color: rgba(0, 128, 128, 1)">14</span>         self.wb =<span style="color: rgba(0, 0, 0, 1)"> openpyxl.load_workbook(file_name)
</span><span style="color: rgba(0, 128, 128, 1)">15</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 选择表单</span>
<span style="color: rgba(0, 128, 128, 1)">16</span>         self.sh =<span style="color: rgba(0, 0, 0, 1)"> self.wb
</span><span style="color: rgba(0, 128, 128, 1)">17</span>   <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> read_data_line(self):
</span><span style="color: rgba(0, 128, 128, 1)">18</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">按行读取数据转化为列表</span>
<span style="color: rgba(0, 128, 128, 1)">19</span>         rows_data =<span style="color: rgba(0, 0, 0, 1)"> list(self.sh.rows)
</span><span style="color: rgba(0, 128, 128, 1)">20</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(rows_data)</span>
<span style="color: rgba(0, 128, 128, 1)">21</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 获取表单的表头信息</span>
<span style="color: rgba(0, 128, 128, 1)">22</span>         titles =<span style="color: rgba(0, 0, 0, 1)"> []
</span><span style="color: rgba(0, 128, 128, 1)">23</span>         <span style="color: rgba(0, 0, 255, 1)">for</span> title <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> rows_data:
</span><span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 0, 0, 1)">            titles.append(title.value)
</span><span style="color: rgba(0, 128, 128, 1)">25</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(titles)</span>
<span style="color: rgba(0, 128, 128, 1)">26</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">定义一个空列表用来存储测试用例</span>
<span style="color: rgba(0, 128, 128, 1)">27</span>         cases =<span style="color: rgba(0, 0, 0, 1)"> []
</span><span style="color: rgba(0, 128, 128, 1)">28</span>         <span style="color: rgba(0, 0, 255, 1)">for</span> case <span style="color: rgba(0, 0, 255, 1)">in</span> rows_data:
</span><span style="color: rgba(0, 128, 128, 1)">29</span>             <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(case)</span>
<span style="color: rgba(0, 128, 128, 1)">30</span>             data =<span style="color: rgba(0, 0, 0, 1)"> []
</span><span style="color: rgba(0, 128, 128, 1)">31</span>             <span style="color: rgba(0, 0, 255, 1)">for</span> cell <span style="color: rgba(0, 0, 255, 1)">in</span> case: <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">获取一条测试用例数据</span>
<span style="color: rgba(0, 128, 128, 1)">32</span>               <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(cell.value)</span>
<span style="color: rgba(0, 128, 128, 1)">33</span> <span style="color: rgba(0, 0, 0, 1)">                data.append(cell.value)
</span><span style="color: rgba(0, 128, 128, 1)">34</span>               <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(data)</span>
<span style="color: rgba(0, 128, 128, 1)">35</span>               <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">判断该单元格是否为字符串,如果是字符串类型则需要使用eval();如果不是字符串类型则不需要使用eval()</span>
<span style="color: rgba(0, 128, 128, 1)">36</span>               <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> isinstance(cell.value,str):
</span><span style="color: rgba(0, 128, 128, 1)">37</span> <span style="color: rgba(0, 0, 0, 1)">                  data.append(eval(cell.value))
</span><span style="color: rgba(0, 128, 128, 1)">38</span>               <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">39</span> <span style="color: rgba(0, 0, 0, 1)">                  data.append(cell.value)
</span><span style="color: rgba(0, 128, 128, 1)">40</span>               <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">将该条数据存放至cases中</span>
<span style="color: rgba(0, 128, 128, 1)">41</span>             <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(dict(list(zip(titles,data))))</span>
<span style="color: rgba(0, 128, 128, 1)">42</span>               case_data =<span style="color: rgba(0, 0, 0, 1)"> dict(list(zip(titles,data)))
</span><span style="color: rgba(0, 128, 128, 1)">43</span> <span style="color: rgba(0, 0, 0, 1)">                cases.append(case_data)
</span><span style="color: rgba(0, 128, 128, 1)">44</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> cases
</span><span style="color: rgba(0, 128, 128, 1)">45</span> <span style="color: rgba(0, 0, 255, 1)">if</span> <span style="color: rgba(128, 0, 128, 1)">__name__</span> == <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">__main__</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">46</span>   r = ReadExcel(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">cases.xlsx</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Sheet1</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">47</span>   data1 =<span style="color: rgba(0, 0, 0, 1)"> r.read_data_line()
</span><span style="color: rgba(0, 128, 128, 1)">48</span>   <span style="color: rgba(0, 0, 255, 1)">print</span>(data1)</pre>
</div>
<h3>2.按行读取数据,存储在对象中</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> openpyxl
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Case:
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span>   <span style="color: rgba(0, 0, 255, 1)">pass</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> ReadExcel(object):
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>   <span style="color: rgba(0, 0, 255, 1)">def</span> <span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(self,filename,sheetname):
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>         self.wb =<span style="color: rgba(0, 0, 0, 1)"> openpyxl.load_workbook(filename)
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>         self.sh =<span style="color: rgba(0, 0, 0, 1)"> self.wb
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>   <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> read_data_obj(self):
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>         <span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(128, 0, 0, 1)">      按行读取数据每条用例存储在一个对象中
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(128, 0, 0, 1)">      :return:
</span><span style="color: rgba(0, 128, 128, 1)">12</span>         <span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 128, 128, 1)">13</span>         rows_data =<span style="color: rgba(0, 0, 0, 1)"> list(self.sh.rows)
</span><span style="color: rgba(0, 128, 128, 1)">14</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(rows_data)</span>
<span style="color: rgba(0, 128, 128, 1)">15</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 获取表单的表头信息</span>
<span style="color: rgba(0, 128, 128, 1)">16</span>         titles =<span style="color: rgba(0, 0, 0, 1)"> []
</span><span style="color: rgba(0, 128, 128, 1)">17</span>         <span style="color: rgba(0, 0, 255, 1)">for</span> title <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> rows_data:
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">            titles.append(title.value)
</span><span style="color: rgba(0, 128, 128, 1)">19</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(titles)</span>
<span style="color: rgba(0, 128, 128, 1)">20</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 定义一个空列表用来存储测试用例</span>
<span style="color: rgba(0, 128, 128, 1)">21</span>         cases =<span style="color: rgba(0, 0, 0, 1)"> []
</span><span style="color: rgba(0, 128, 128, 1)">22</span>         <span style="color: rgba(0, 0, 255, 1)">for</span> case <span style="color: rgba(0, 0, 255, 1)">in</span> rows_data:
</span><span style="color: rgba(0, 128, 128, 1)">23</span>             <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(case)</span>
<span style="color: rgba(0, 128, 128, 1)">24</span>             <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">创建一个Case类的对象,用来保存用例数据</span>
<span style="color: rgba(0, 128, 128, 1)">25</span>             case_obj =<span style="color: rgba(0, 0, 0, 1)"> Case()
</span><span style="color: rgba(0, 128, 128, 1)">26</span>             data =<span style="color: rgba(0, 0, 0, 1)"> []
</span><span style="color: rgba(0, 128, 128, 1)">27</span>             <span style="color: rgba(0, 0, 255, 1)">for</span> cell <span style="color: rgba(0, 0, 255, 1)">in</span> case:<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 获取一条测试用例数据</span>
<span style="color: rgba(0, 128, 128, 1)">28</span>               <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(cell.value)</span>
<span style="color: rgba(0, 128, 128, 1)">29</span>               <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> data.append(cell.value)</span>
<span style="color: rgba(0, 128, 128, 1)">30</span>               <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(data)</span>
<span style="color: rgba(0, 128, 128, 1)">31</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> isinstance(cell.value,str):<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 判断该单元格是否为字符串,如果是字符串类型则需要使用eval();如果不是字符串类型则不需要使用eval()</span>
<span style="color: rgba(0, 128, 128, 1)">32</span> <span style="color: rgba(0, 0, 0, 1)">                  data.append(eval(cell.value))
</span><span style="color: rgba(0, 128, 128, 1)">33</span>               <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">34</span> <span style="color: rgba(0, 0, 0, 1)">                  data.append(cell.value)
</span><span style="color: rgba(0, 128, 128, 1)">35</span>             <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 将该条数据存放至cases中</span>
<span style="color: rgba(0, 128, 128, 1)">36</span>             <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(dict(list(zip(titles,data))))</span>
<span style="color: rgba(0, 128, 128, 1)">37</span>             case_data =<span style="color: rgba(0, 0, 0, 1)"> list(zip(titles, data))
</span><span style="color: rgba(0, 128, 128, 1)">38</span>             <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(case_data)</span>
<span style="color: rgba(0, 128, 128, 1)">39</span>             <span style="color: rgba(0, 0, 255, 1)">for</span> i <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> case_data:
</span><span style="color: rgba(0, 128, 128, 1)">40</span>               setattr(case_obj,i,i)
</span><span style="color: rgba(0, 128, 128, 1)">41</span>             <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(case_obj)</span>
<span style="color: rgba(0, 128, 128, 1)">42</span>             <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(case_obj.case_id,case_obj.data,case_obj.excepted)</span>
<span style="color: rgba(0, 128, 128, 1)">43</span> <span style="color: rgba(0, 0, 0, 1)">            cases.append(case_obj)
</span><span style="color: rgba(0, 128, 128, 1)">44</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> cases
</span><span style="color: rgba(0, 128, 128, 1)">45</span> <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(128, 0, 128, 1)">__name__</span> == <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">__main__</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">46</span>   r = ReadExcel(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">cases.xlsx</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Sheet1</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">47</span>   res =<span style="color: rgba(0, 0, 0, 1)"> r.read_data_obj()
</span><span style="color: rgba(0, 128, 128, 1)">48</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> i <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> res:
</span><span style="color: rgba(0, 128, 128, 1)">49</span>         <span style="color: rgba(0, 0, 255, 1)">print</span>(i.caseid, i.excepted, i.data)</pre>
</div>
<h3>&nbsp;3.将测试用例封装到列表中,读取指定列的数据</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> openpyxl
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Case:
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span>   <span style="color: rgba(0, 0, 255, 1)">pass</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> ReadExcelZy(object):
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>   <span style="color: rgba(0, 0, 255, 1)">def</span> <span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(self,filename,sheetname):
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>         self.wb =<span style="color: rgba(0, 0, 0, 1)"> openpyxl.load_workbook(filename)
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>         self.sheet =<span style="color: rgba(0, 0, 0, 1)"> self.wb
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> list1 参数为一个列表,传入的是指定读取数据的列,比如</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 每一行列的数据,读取出来就作为一条测试用例,放在字典中</span>
<span style="color: rgba(0, 128, 128, 1)">10</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 所有的用例放在列表中并且进行返回</span>
<span style="color: rgba(0, 128, 128, 1)">11</span>   <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> read_data(self,list1):
</span><span style="color: rgba(0, 128, 128, 1)">12</span>         <span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(128, 0, 0, 1)">      :param list1:list---&gt;要读取列   list类型
</span><span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(128, 0, 0, 1)">      :return:    返回一个列表,每一个元素为一个用例(用例为dict类型)
</span><span style="color: rgba(0, 128, 128, 1)">15</span>         <span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 128, 128, 1)">16</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 获取最大的行数</span>
<span style="color: rgba(0, 128, 128, 1)">17</span>         max_r =<span style="color: rgba(0, 0, 0, 1)"> self.sheet.max_row
</span><span style="color: rgba(0, 128, 128, 1)">18</span>         cases = []   <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">定义一个空列表,用来存放所有的用例数据</span>
<span style="color: rgba(0, 128, 128, 1)">19</span>         titles = []   <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">定义一个空列表,用来存放表头</span>
<span style="color: rgba(0, 128, 128, 1)">20</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 遍历所有的行数据</span>
<span style="color: rgba(0, 128, 128, 1)">21</span>         <span style="color: rgba(0, 0, 255, 1)">for</span> row <span style="color: rgba(0, 0, 255, 1)">in</span> range(1,max_r+1<span style="color: rgba(0, 0, 0, 1)">):
</span><span style="color: rgba(0, 128, 128, 1)">22</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> row != 1:      <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">判断是否是第一行</span>
<span style="color: rgba(0, 128, 128, 1)">23</span>               case_data = [] <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">定义一个空列表,用来存放该行的用例数据</span>
<span style="color: rgba(0, 128, 128, 1)">24</span>               <span style="color: rgba(0, 0, 255, 1)">for</span> column <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> list1:
</span><span style="color: rgba(0, 128, 128, 1)">25</span>                     info =<span style="color: rgba(0, 0, 0, 1)"> self.sheet.cell(row,column).value
</span><span style="color: rgba(0, 128, 128, 1)">26</span>                     <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(info)</span>
<span style="color: rgba(0, 128, 128, 1)">27</span> <span style="color: rgba(0, 0, 0, 1)">                  case_data.append(info)
</span><span style="color: rgba(0, 128, 128, 1)">28</span>                     <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(list(zip(titles,case_data)))</span>
<span style="color: rgba(0, 128, 128, 1)">29</span>               case = dict(zip(titles,case_data))<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">将该条数据和表头进行打包组合,作用相当于dict(list(zip(titles,case_data)))</span>
<span style="color: rgba(0, 128, 128, 1)">30</span>               <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(case)</span>
<span style="color: rgba(0, 128, 128, 1)">31</span> <span style="color: rgba(0, 0, 0, 1)">                cases.append(case)
</span><span style="color: rgba(0, 128, 128, 1)">32</span>               <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(cases)</span>
<span style="color: rgba(0, 128, 128, 1)">33</span>             <span style="color: rgba(0, 0, 255, 1)">else</span>:   <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">获取表头数据</span>
<span style="color: rgba(0, 128, 128, 1)">34</span>               <span style="color: rgba(0, 0, 255, 1)">for</span> column <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> list1:
</span><span style="color: rgba(0, 128, 128, 1)">35</span>                     title =<span style="color: rgba(0, 0, 0, 1)"> self.sheet.cell(row,column).value
</span><span style="color: rgba(0, 128, 128, 1)">36</span> <span style="color: rgba(0, 0, 0, 1)">                  titles.append(title)
</span><span style="color: rgba(0, 128, 128, 1)">37</span>               <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(titles)</span>
<span style="color: rgba(0, 128, 128, 1)">38</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> cases
</span><span style="color: rgba(0, 128, 128, 1)">39</span> <span style="color: rgba(0, 0, 255, 1)">if</span> <span style="color: rgba(128, 0, 128, 1)">__name__</span> == <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">__main__</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">40</span>   r = ReadExcelZy(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cases.xlsx</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Sheet1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">41</span>   res = r.read_data()
</span><span style="color: rgba(0, 128, 128, 1)">42</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> o <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> res:
</span><span style="color: rgba(0, 128, 128, 1)">43</span>         <span style="color: rgba(0, 0, 255, 1)">print</span>(o[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">caseid</span><span style="color: rgba(128, 0, 0, 1)">'</span>],o[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">data</span><span style="color: rgba(128, 0, 0, 1)">'</span>],o[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">excepted</span><span style="color: rgba(128, 0, 0, 1)">'</span>])</pre>
</div>
<h3>&nbsp;4.将测试用例封装到对象中,读取指定列的数据</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> openpyxl
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Case:
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span>   <span style="color: rgba(0, 0, 255, 1)">pass</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> ReadExcelZy(object):
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>   <span style="color: rgba(0, 0, 255, 1)">def</span> <span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(self,filename,sheetname):
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>         self.wb =<span style="color: rgba(0, 0, 0, 1)"> openpyxl.load_workbook(filename)
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>         self.sheet =<span style="color: rgba(0, 0, 0, 1)"> self.wb
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> list1 参数为一个列表,传入的是指定读取数据的列,比如</span>
<span style="color: rgba(0, 128, 128, 1)">10</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 每一行列的数据,读取出来就作为一条测试用例,放在字典中</span>
<span style="color: rgba(0, 128, 128, 1)">11</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 所有的用例放在对象中并且进行返回</span>
<span style="color: rgba(0, 128, 128, 1)">12</span>   <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> read_data_obj(self,list2):
</span><span style="color: rgba(0, 128, 128, 1)">13</span>         max_r1 = self.sheet.max_row      <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">获取最大行数</span>
<span style="color: rgba(0, 128, 128, 1)">14</span>         cases =<span style="color: rgba(0, 0, 0, 1)"> []
</span><span style="color: rgba(0, 128, 128, 1)">15</span>         titles = []      <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">用来存放表头数据</span>
<span style="color: rgba(0, 128, 128, 1)">16</span>         <span style="color: rgba(0, 0, 255, 1)">for</span> row <span style="color: rgba(0, 0, 255, 1)">in</span> range(1,max_r1+1<span style="color: rgba(0, 0, 0, 1)">):
</span><span style="color: rgba(0, 128, 128, 1)">17</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> row != 1<span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">18</span>               case_data =<span style="color: rgba(0, 0, 0, 1)"> []
</span><span style="color: rgba(0, 128, 128, 1)">19</span>               <span style="color: rgba(0, 0, 255, 1)">for</span> column <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> list2:
</span><span style="color: rgba(0, 128, 128, 1)">20</span>                     info =<span style="color: rgba(0, 0, 0, 1)"> self.sheet.cell(row,column).value
</span><span style="color: rgba(0, 128, 128, 1)">21</span>                     <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(info)</span>
<span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(0, 0, 0, 1)">                  case_data.append(info)
</span><span style="color: rgba(0, 128, 128, 1)">23</span>               cases_data =<span style="color: rgba(0, 0, 0, 1)"> list(zip(titles,case_data))
</span><span style="color: rgba(0, 128, 128, 1)">24</span>               <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">将一条用例存到一个对象中(每一列对应对象的一个属性)</span>
<span style="color: rgba(0, 128, 128, 1)">25</span>               case_obj =<span style="color: rgba(0, 0, 0, 1)"> Case()
</span><span style="color: rgba(0, 128, 128, 1)">26</span>               <span style="color: rgba(0, 0, 255, 1)">for</span> i <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> cases_data:
</span><span style="color: rgba(0, 128, 128, 1)">27</span>                     <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(i)</span>
<span style="color: rgba(0, 128, 128, 1)">28</span>                     setattr(case_obj,i,i)
</span><span style="color: rgba(0, 128, 128, 1)">29</span>               <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(case_obj.caseid,case_obj.excepted,case_obj.data)</span>
<span style="color: rgba(0, 128, 128, 1)">30</span> <span style="color: rgba(0, 0, 0, 1)">                cases.append(case_obj)
</span><span style="color: rgba(0, 128, 128, 1)">31</span>             <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">32</span>               <span style="color: rgba(0, 0, 255, 1)">for</span> column <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> list2:
</span><span style="color: rgba(0, 128, 128, 1)">33</span>                     title =<span style="color: rgba(0, 0, 0, 1)"> self.sheet.cell(row,column).value
</span><span style="color: rgba(0, 128, 128, 1)">34</span> <span style="color: rgba(0, 0, 0, 1)">                  titles.append(title)
</span><span style="color: rgba(0, 128, 128, 1)">35</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> cases
</span><span style="color: rgba(0, 128, 128, 1)">36</span> <span style="color: rgba(0, 0, 255, 1)">if</span> <span style="color: rgba(128, 0, 128, 1)">__name__</span> == <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">__main__</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">37</span>   r = ReadExcelZy(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cases.xlsx</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Sheet1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">38</span>   res = r.read_data_obj()
</span><span style="color: rgba(0, 128, 128, 1)">39</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> i <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> res:
</span><span style="color: rgba(0, 128, 128, 1)">40</span>         <span style="color: rgba(0, 0, 255, 1)">print</span>(i.caseid,i.data,i.excepted)</pre>
</div>
<h3>&nbsp;5.优化第4部分代码,将设置对象属性写在初始化方法中(封装Excel类读取数据最常用的方法)</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> openpyxl
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 255, 1)">class</span> Case:<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 这个类用来存储用例的</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span>   <span style="color: rgba(0, 0, 255, 1)">def</span> <span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(self, attrs):
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>         <span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(128, 0, 0, 1)">      初始化用例
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(128, 0, 0, 1)">      :param attrs:zip类型——&gt;[{key,value},(key1,value1)......]
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>         <span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span>         <span style="color: rgba(0, 0, 255, 1)">for</span> i <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> attrs:
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>             setattr(self, i, i)
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> ReadExcel(object):
</span><span style="color: rgba(0, 128, 128, 1)">11</span>   <span style="color: rgba(0, 0, 255, 1)">def</span> <span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(self, filename, sheetname):
</span><span style="color: rgba(0, 128, 128, 1)">12</span>         <span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(128, 0, 0, 1)">      定义需要打开的文件及表名
</span><span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(128, 0, 0, 1)">      :param filename:   文件名
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(128, 0, 0, 1)">      :param sheetname:表名
</span><span style="color: rgba(0, 128, 128, 1)">16</span>         <span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 128, 128, 1)">17</span>         self.wb =<span style="color: rgba(0, 0, 0, 1)"> openpyxl.load_workbook(filename)
</span><span style="color: rgba(0, 128, 128, 1)">18</span>         self.sheet =<span style="color: rgba(0, 0, 0, 1)"> self.wb
</span><span style="color: rgba(0, 128, 128, 1)">19</span>   <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> read_data_obj_new(self, list2):
</span><span style="color: rgba(0, 128, 128, 1)">20</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 获取最大行数</span>
<span style="color: rgba(0, 128, 128, 1)">21</span>         max_r1 =<span style="color: rgba(0, 0, 0, 1)"> self.sheet.max_row
</span><span style="color: rgba(0, 128, 128, 1)">22</span>         cases =<span style="color: rgba(0, 0, 0, 1)"> []
</span><span style="color: rgba(0, 128, 128, 1)">23</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 用来存放表头数据</span>
<span style="color: rgba(0, 128, 128, 1)">24</span>         titles =<span style="color: rgba(0, 0, 0, 1)"> []
</span><span style="color: rgba(0, 128, 128, 1)">25</span>         <span style="color: rgba(0, 0, 255, 1)">for</span> row <span style="color: rgba(0, 0, 255, 1)">in</span> range(1, max_r1 + 1<span style="color: rgba(0, 0, 0, 1)">):
</span><span style="color: rgba(0, 128, 128, 1)">26</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> row != 1<span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">27</span>               case_data =<span style="color: rgba(0, 0, 0, 1)"> []
</span><span style="color: rgba(0, 128, 128, 1)">28</span>               <span style="color: rgba(0, 0, 255, 1)">for</span> column <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> list2:
</span><span style="color: rgba(0, 128, 128, 1)">29</span>                     info =<span style="color: rgba(0, 0, 0, 1)"> self.sheet.cell(row, column).value
</span><span style="color: rgba(0, 128, 128, 1)">30</span>                     <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(info)</span>
<span style="color: rgba(0, 128, 128, 1)">31</span> <span style="color: rgba(0, 0, 0, 1)">                  case_data.append(info)
</span><span style="color: rgba(0, 128, 128, 1)">32</span>               case =<span style="color: rgba(0, 0, 0, 1)"> list(zip(titles, case_data))
</span><span style="color: rgba(0, 128, 128, 1)">33</span>               <span style="color: rgba(0, 128, 0, 1)"># 新建对象时,将对象传给Case类
</span><span style="color: rgba(0, 128, 128, 1)">34</span>               case_obj =<span style="color: rgba(0, 0, 0, 1)"> Case(case)
</span><span style="color: rgba(0, 128, 128, 1)">35</span>               <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(case_obj.caseid,case_obj.excepted,case_obj.data)</span>
<span style="color: rgba(0, 128, 128, 1)">36</span> <span style="color: rgba(0, 0, 0, 1)">                cases.append(case_obj)
</span><span style="color: rgba(0, 128, 128, 1)">37</span>             <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">38</span>               <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 获取表头</span>
<span style="color: rgba(0, 128, 128, 1)">39</span>               <span style="color: rgba(0, 0, 255, 1)">for</span> column <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> list2:
</span><span style="color: rgba(0, 128, 128, 1)">40</span>                     title =<span style="color: rgba(0, 0, 0, 1)"> self.sheet.cell(row, column).value
</span><span style="color: rgba(0, 128, 128, 1)">41</span> <span style="color: rgba(0, 0, 0, 1)">                  titles.append(title)
</span><span style="color: rgba(0, 128, 128, 1)">42</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> None <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> titles:
</span><span style="color: rgba(0, 128, 128, 1)">43</span>                     <span style="color: rgba(0, 0, 255, 1)">raise</span> ValueError(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">传入的表头的数据有显示为空</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">44</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> cases
</span><span style="color: rgba(0, 128, 128, 1)">45</span> <span style="color: rgba(0, 0, 255, 1)">if</span> <span style="color: rgba(128, 0, 128, 1)">__name__</span> == <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">__main__</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">46</span>   r = ReadExcel(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">cases.xlsx</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Sheet1</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">47</span>   res1 = r.read_data_obj_new()
</span><span style="color: rgba(0, 128, 128, 1)">48</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> i <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> res1:
</span><span style="color: rgba(0, 128, 128, 1)">49</span>         <span style="color: rgba(0, 0, 255, 1)">print</span>(i.caseid, i.data, i.excepted)</pre>
</div>
<h2>三.完整流程的代码</h2>
<h2>一、将测试数据参数化</h2>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> unittest
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 255, 1)">from</span> python.register_new.register <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> register
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 255, 1)">from</span> python.register_new.register_testcase_new <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> RegisterTestCase
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 255, 1)">from</span> HTMLTestRunnerNew <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> HTMLTestRunner
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> RegisterTestCase(unittest.TestCase):
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>   <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 初始化测试用例</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span>   <span style="color: rgba(0, 0, 255, 1)">def</span> <span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(self,modethod_name,excepted,data):
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> modethod_name 测试用例方法名</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span>         super().<span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(modethod_name)
</span><span style="color: rgba(0, 128, 128, 1)">10</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> excepted 测试用例的预期结果</span>
<span style="color: rgba(0, 128, 128, 1)">11</span>         self.excepted =<span style="color: rgba(0, 0, 0, 1)"> excepted
</span><span style="color: rgba(0, 128, 128, 1)">12</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> data 测试用例参数值                </span>
<span style="color: rgba(0, 128, 128, 1)">13</span>         self.data =<span style="color: rgba(0, 0, 0, 1)"> data
</span><span style="color: rgba(0, 128, 128, 1)">14</span>
<span style="color: rgba(0, 128, 128, 1)">15</span>   <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> setUp(self):
</span><span style="color: rgba(0, 128, 128, 1)">16</span>         <span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">准备测试环境,执行测试用例之前会执行此操作</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">17</span>
<span style="color: rgba(0, 128, 128, 1)">18</span>   <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> tearDown(self):
</span><span style="color: rgba(0, 128, 128, 1)">19</span>         <span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">还原测试环境,执行完测试用例之后会执行此操作</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">20</span>
<span style="color: rgba(0, 128, 128, 1)">21</span>   <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> test_register(self):
</span><span style="color: rgba(0, 128, 128, 1)">22</span>         res = register(*<span style="color: rgba(0, 0, 0, 1)">self.data)
</span><span style="color: rgba(0, 128, 128, 1)">23</span>         <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 0, 0, 1)">            self.assertEquals(self.excepted,res)
</span><span style="color: rgba(0, 128, 128, 1)">25</span>         <span style="color: rgba(0, 0, 255, 1)">except</span><span style="color: rgba(0, 0, 0, 1)"> AssertionError as e:
</span><span style="color: rgba(0, 128, 128, 1)">26</span>             <span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">该条测试用例执行未通通过</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">27</span>             <span style="color: rgba(0, 0, 255, 1)">raise</span><span style="color: rgba(0, 0, 0, 1)"> e
</span><span style="color: rgba(0, 128, 128, 1)">28</span>         <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">29</span>             <span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">该条测试用例执行通过</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">30</span>
<span style="color: rgba(0, 128, 128, 1)">31</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 创建测试套件</span>
<span style="color: rgba(0, 128, 128, 1)">32</span> suite =<span style="color: rgba(0, 0, 0, 1)"> unittest.TestSuite()
</span><span style="color: rgba(0, 128, 128, 1)">33</span>
<span style="color: rgba(0, 128, 128, 1)">34</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 将测试用例添加至测试套件中</span>
<span style="color: rgba(0, 128, 128, 1)">35</span> case = [{<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">excepted</span><span style="color: rgba(128, 0, 0, 1)">'</span>:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">{"code": 1, "msg": "注册成功"}</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">data</span><span style="color: rgba(128, 0, 0, 1)">'</span>:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">(</span><span style="color: rgba(128, 0, 0, 1)">'</span>python1<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">, </span><span style="color: rgba(128, 0, 0, 1)">'</span>123456<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">,</span><span style="color: rgba(128, 0, 0, 1)">'</span>123456<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">)</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">36</span>         {<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">excepted</span><span style="color: rgba(128, 0, 0, 1)">'</span>:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">{"code": 0, "msg": "两次密码不一致"}</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">data</span><span style="color: rgba(128, 0, 0, 1)">'</span>:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">(</span><span style="color: rgba(128, 0, 0, 1)">'</span>python1<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">, </span><span style="color: rgba(128, 0, 0, 1)">'</span>1234567<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">,</span><span style="color: rgba(128, 0, 0, 1)">'</span>123456<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">)</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">}]
</span><span style="color: rgba(0, 128, 128, 1)">37</span> <span style="color: rgba(0, 0, 255, 1)">for</span> case <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> cases:
</span><span style="color: rgba(0, 128, 128, 1)">38</span>   suite.addTest(RegisterTestCase(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">test_register</span><span style="color: rgba(128, 0, 0, 1)">'</span>,case[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">excepted</span><span style="color: rgba(128, 0, 0, 1)">'</span>],case[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">data</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">]))
</span><span style="color: rgba(0, 128, 128, 1)">39</span>
<span style="color: rgba(0, 128, 128, 1)">40</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 执行测试套件,生成测试报告</span>
<span style="color: rgba(0, 128, 128, 1)">41</span> with open(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">report.html</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">wb</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">) as f:
</span><span style="color: rgba(0, 128, 128, 1)">42</span>   runner =<span style="color: rgba(0, 0, 0, 1)"> HTMLTestRunner(
</span><span style="color: rgba(0, 128, 128, 1)">43</span>         stream =<span style="color: rgba(0, 0, 0, 1)"> f,
</span><span style="color: rgba(0, 128, 128, 1)">44</span>         verbosity = 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">45</span>         title = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">python_test_report</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">46</span>         description = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">这是一份测试报告</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">47</span>         tester = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">WL</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 128, 1)">48</span> <span style="color: rgba(0, 0, 0, 1)">    )
</span><span style="color: rgba(0, 128, 128, 1)">49</span>   runner.run(suite)</pre>
</div>
<h3>二.将调用封装好的Excel类的完整代码流程</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> unittest
</span><span style="color: rgba(0, 0, 255, 1)">from</span> python.register_new.register <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> register
</span><span style="color: rgba(0, 0, 255, 1)">from</span> python.register_new.register_testcase_new <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> RegisterTestCase
</span><span style="color: rgba(0, 0, 255, 1)">from</span> HTMLTestRunnerNew <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> HTMLTestRunner
</span><span style="color: rgba(0, 0, 255, 1)">from</span> python.readexcel <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> ReadExcel


</span><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> RegisterTestCase(unittest.TestCase):
    </span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 初始化测试用例</span>
    <span style="color: rgba(0, 0, 255, 1)">def</span> <span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(self, modethod_name, excepted, data):
      </span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> modethod_name 测试用例方法名</span>
      super().<span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(modethod_name)
      </span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> excepted 测试用例的预期结果</span>
      self.excepted =<span style="color: rgba(0, 0, 0, 1)"> excepted
      </span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> data 测试用例参数值</span>
      self.data =<span style="color: rgba(0, 0, 0, 1)"> data

    </span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> setUp(self):
      </span><span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">准备测试环境,执行测试用例之前会执行此操作</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)

    </span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> tearDown(self):
      </span><span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">还原测试环境,执行完测试用例之后会执行此操作</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)

    </span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> test_register(self):
      res </span>= register(*<span style="color: rgba(0, 0, 0, 1)">self.data)
      </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">:
            self.assertEquals(self.excepted, res)
      </span><span style="color: rgba(0, 0, 255, 1)">except</span><span style="color: rgba(0, 0, 0, 1)"> AssertionError as e:
            </span><span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">该条测试用例执行未通通过</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
            </span><span style="color: rgba(0, 0, 255, 1)">raise</span><span style="color: rgba(0, 0, 0, 1)"> e
      </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
            </span><span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">该条测试用例执行通过</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)


</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 创建测试套件</span>
suite =<span style="color: rgba(0, 0, 0, 1)"> unittest.TestSuite()
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 调用封装好的读取数据的Excel类,获取测试数据</span>
r1 = ReadExcel(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">cases.xlsx</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Sheet1</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
cases </span>= r1.read_data_obj_new()
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 将测试用例添加至测试套件中</span>
<span style="color: rgba(0, 0, 255, 1)">for</span> case <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> cases:
    </span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 需要使用eval()函数对except和data进行自动识别</span>
    suite.addTest(RegisterTestCase(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">test_register</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, eval(case.excepted), eval(case.data)))
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 执行测试套件,生成测试报告</span>
with open(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">report.html</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">wb</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">) as f:
    runner </span>=<span style="color: rgba(0, 0, 0, 1)"> HTMLTestRunner(
      stream</span>=<span style="color: rgba(0, 0, 0, 1)">f,
      verbosity</span>=2<span style="color: rgba(0, 0, 0, 1)">,
      title</span>=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">python_test_report</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
      description</span>=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">这是一份测试报告</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
      tester</span>=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">WL</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
    runner.run(suite)</span></pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/wanglle/p/11455758.html
頁: [1]
查看完整版本: python操作Excel表格