老汪川菜馆无名 發表於 2019-5-5 13:30:00

python接口自动化(二十八)--html测试 报告——下(详解)

<h2>简介</h2>
<p>  五一小长假已经结束了,想必大家都吃饱喝足玩好了,那就继续学习吧。一天不学习,自己知道;两天不学习,对手知道;三天不学习,大家知道;一周不学习,智商输给猪。好了开个玩笑都逗大家一乐,但是想想还是有道理的。那就进</p>
<p>入正题:上一篇我们批量执行完用例后,已经生成的测试报告是生成 HTML 格式的。但是我们可以看出那个官方的测试报告既不美观也不大方,我们这里需要优化一下,优化的让人赏心悦目,就和看到一个美女一样看了一眼,忍不住回头再多</p>
<p>看一眼&nbsp; - _ - 并且把上一篇遇到的问题列举解决一下。</p>
<h2>python3如何改动下载的HTMLTestRunner</h2>
<h3>HTMLTestRunner.py 的python3 版本</h3>
<p>由于 HTMLTestRunner.py 原本就是python2版本,目前还没找到python3版本,所以需要我们自己修改 HTMLTestRunner.py 文件。</p>
<h4>1. 修改的地方</h4>
<p><span style="color: rgba(255, 0, 0, 1)">问题一</span>:No module named StringIO</p>
<p>原因:python 3 中 没有&nbsp;StringIO 这个模块。这里我们需要使用io 这个模块来代替。</p>
<p>解决方法:</p>
<p>第94行引入的名称要改,从 import StringIO&nbsp;改成import io。</p>
<p>相应的,539行 self.outputBuffer = StringIO.StringIO()&nbsp;要改成self.outputBuffer = io.BytesIO()</p>
<p><span style="color: rgba(255, 0, 0, 1)">问题二</span>:AttributeError: 'dict' object has no attribute 'has_key'</p>
<p>原因:python 3 字典类型的object 已经不支持 has_key函数,我们需要使用in 来进行遍历。</p>
<p>解决方法:</p>
<p>定位到642行,if not rmap.has_key(cls): 需要换成 if not cls in rmap:</p>
<p><span style="color: rgba(255, 0, 0, 1)">问题三</span>:'str' object has no attribute 'decode'</p>
<p>原因:python3 里面对字符的操作中,decode已经拿掉了。</p>
<p>解决方法:</p>
<p>定位到772行,把 ue = e.decode('latin-1') 直接改成 ue = e 。</p>
<p>另外766还有类似的uo = o.decode('latin-1'),改成 uo=o ;</p>
<p><span style="color: rgba(255, 0, 0, 1)">问题四</span> :TypeError: can't concat bytes to str</p>
<p>原因:定位一下,报在了778行的内容escape(uo+ue) 。这是因为我们上面给uo赋值的时候,走的是else流程,uo被赋值的是bytes类型的值。 而bytes类型不能直接转化为str类型。所以我们需要在前面给uo赋值的时候先将bytes类型转换为 str类型。</p>
<p>解决方法:</p>
<p>修改768行的&nbsp;uo = o ,直接改成&nbsp;uo = o.decode('utf-8') 。</p>
<p>另外 774还有类似的 &nbsp;ue = e, 改成&nbsp;ue = e.decode('utf-8')。</p>
<p><span style="color: rgba(255, 0, 0, 1)">问题五</span>:TypeError: unsupported operand type(s) for &gt;&gt;: 'builtin_function_or_method' and 'RPCProxy'</p>
<p>原因:&nbsp;python3 &nbsp;不支持 print&nbsp;&gt;&gt; sys.stderr 这种写法,这里定义输出流的话,采用print("This is print str",file=sys.stderr) 这种方式。</p>
<p>解决方法:</p>
<p>定位到631行,把print的语句修改掉,原来是print &gt;&gt;sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime), 可改成&nbsp;print('\nTime Elapsed: %s' % (self.stopTime-self.startTime),file=sys.stderr)</p>
<p><span style="color: rgba(255, 0, 0, 1)">问题六</span>:TypeError: 'str' does not support the buffer interface</p>
<p>原因:定位一下,问题出在118行,这里s是str类型,我们需要把传过来的s转化为bytes类型。</p>
<p>解决方法:</p>
<p>定位到118行,把&nbsp;self.fp.write(s) 修改为&nbsp;self.fp.write(bytes(s,'UTF-8')) 即可。</p>
<h4>2. 保存</h4>
<p>修改后对HTMLTestRunner.py 保存一下。</p>
<h4>3. 调用语句更改</h4>
<p>python3 里面打开文件使用 open,不要再去用file了。</p>
<p>即 fp = file(filename,'wb')替换成 fp = open(filename,'wb');</p>
<p>关闭该文件可用fp.close()</p>
<p>备注: 改动之后,中文也不会乱码。</p>
<h2>中文乱码</h2>
<p>1、测试报告中,msg 自定义异常内容有中文情况会出现乱码,如图所示:</p>
<p>&nbsp;<img src="https://img2018.cnblogs.com/blog/1232840/201904/1232840-20190430135233864-848932277.png" alt=""></p>
<p>2、找到 HTMLTestRunner.py 文件,搜索:uo =</p>
<p>3、找到红色区域设置编码的两个地方</p>
<p><img src="https://img2018.cnblogs.com/blog/1232840/201904/1232840-20190430134430216-1843435441.png" alt=""></p>
<p>4、注释掉红色区域这两个设置,重新添加编码格式为:uo = o.decode('utf-8') ue =&nbsp;e.decode('utf-8'),或者在此基础上直接修给成uo = o.decode('utf-8') ue =&nbsp;e.decode('utf-8'),建议初学者还是用第一种方法。这样出错了,可以很快还原,否则</p>
<p>在碰到更复杂的代码直接修改就可能会遇到问题</p>
<p>5、修改好之后记得保存,重新运行,乱码问题就解决了</p>
<p><img src="https://img2018.cnblogs.com/blog/1232840/201904/1232840-20190430135508632-850240072.png" alt=""></p>
<h2>&nbsp;python3 报告问题</h2>
<p>1、各位小伙伴可以按照我前边的方法进行自己修改,或者找我要也是可以,注意在修改的时候空格和Tab的问题,否则运行会报这样的错误</p>
<p><img src="https://img2018.cnblogs.com/blog/1232840/201904/1232840-20190430135930506-1946234772.png" alt=""></p>
<h2>报告问题样式优化</h2>
<p>1、优化是一些前端和CSS知识,在这里就不做详细介绍了,有兴趣的可以找我探讨一下,也可以和我要一下那个优化后的报告文件,优化后报告展示:</p>
<p><img src="https://img2018.cnblogs.com/blog/1232840/201904/1232840-20190430140451648-1262963364.png" alt=""></p>
<p>&nbsp;</p>
<h2>&nbsp;小结</h2>
<p>1、关于生成报告,优化报告就是这么简单,小伙伴们练起来吧!</p>
<p>2、为了新的报告不会覆盖掉老的测试报告,可以按图中的红色部分圈起来的方法实现</p>
<p><img src="https://img2018.cnblogs.com/blog/1232840/201904/1232840-20190430141802039-838368915.png" alt=""></p>
<p>&nbsp;3、参考代码(增加一行代码,测试报告的路径修改一下)</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 0, 1)"># 获取当前时间,这样便于下面的使用。
</span><span style="color: rgba(0, 128, 128, 1)">2</span> now = time.strftime(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">%Y-%m-%M-%H_%M_%S</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, time.localtime(time.time()))
</span><span style="color: rgba(0, 128, 128, 1)">3</span> <span style="color: rgba(0, 0, 0, 1)">#保存生成报告的路径
</span><span style="color: rgba(0, 128, 128, 1)">4</span> report_path =<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">C:\\Users\\DELL\\PycharmProjects\\honggetest\\report\\result</span><span style="color: rgba(128, 0, 0, 1)">"</span>+now+<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">.html</span><span style="color: rgba(128, 0, 0, 1)">"</span></pre>
</div>
<p>&nbsp;</p>

</div>
<div id="MySignature" role="contentinfo">
    <div id="MySignature" style="display: block">
        <div style="font-size: 13px; border: 1px dashed rgb(45, 161, 45); padding: 10px 15px; background-color: rgb(248, 248, 248)">
                <label style="font-weight: bold">
                        &nbsp;&nbsp;&nbsp;&nbsp;为了方便大家在移动端也能看到我分享的博文,现已注册个人微信公众号,扫描左下方二维码即可,欢迎大家关注,提前解锁更多测试干货!有时间会及时分享相关技术博文。
                </label>
                <br>
                <label style="font-weight: bold">
                        &nbsp;&nbsp;&nbsp;&nbsp;为了方便大家互动讨论相关技术问题,刚刚建立了咱们的专门的微信群交流互动群,群内会分享交流测试领域前沿知识。请您扫描中间的微信二维码进群
                </label>
                <br>
                <label style="font-weight: bold">
                        &nbsp;&nbsp;&nbsp;&nbsp;为了方便大家互动讨论相关技术问题,现已组建专门的微信群,由于微信群满100,请您扫描右下方宏哥个人微信二维码拉你进群
                        <label style="font-weight: bold; color: red; font-size: 15px">
                                (请务必备注:已关注公众号进群)平时上班忙(和你一样),所以加好友不及时,请稍安勿躁~
                        </label>
                        ,欢迎大家加入这个大家庭,我们一起畅游知识的海洋。
                </label>
                <br>
                &nbsp;&nbsp;&nbsp;&nbsp;感谢您花时间阅读此篇文章,如果您觉得这篇文章你学到了东西也是为了犒劳下博主的码字不易不妨打赏一下吧,让博主能喝上一杯咖啡,在此谢过了!
                <br>
                &nbsp;&nbsp;&nbsp;&nbsp;如果您觉得阅读本文对您有帮助,请点一下左下角
               
                        “推荐”
               
                按钮,您的
                <label style="font-weight: bold; color: red; font-size: 15px">
                        “推荐”
                </label>
                将是我最大的写作动力!另外您也可以选择
               
                        【
                        <strong>
                                关注我
                        </strong>
                        】
               
                ,可以很方便找到我!
                <br>
                &nbsp;&nbsp;&nbsp;&nbsp;本文版权归作者和博客园共有,来源网址:
               
                        https://www.cnblogs.com/du-hong
               
                欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利!
        </div>
        <div style="text-align: center; margin-top: 10px">
                <p style=" font-weight: bolder; color: red; ">
                        公众号(关注宏哥)&NonBreakingSpace; &NonBreakingSpace;&NonBreakingSpace;&NonBreakingSpace;
                        &NonBreakingSpace; &NonBreakingSpace; &NonBreakingSpace;&NonBreakingSpace;&NonBreakingSpace;&NonBreakingSpace;
                        &NonBreakingSpace;&NonBreakingSpace;&NonBreakingSpace; &NonBreakingSpace;&NonBreakingSpace;&NonBreakingSpace;
                        &NonBreakingSpace;&NonBreakingSpace;&NonBreakingSpace; &NonBreakingSpace;&NonBreakingSpace;&NonBreakingSpace;
                        微信群(扫码进群) &NonBreakingSpace;&NonBreakingSpace;&NonBreakingSpace;
                        &NonBreakingSpace;&NonBreakingSpace;&NonBreakingSpace; &NonBreakingSpace;&NonBreakingSpace;&NonBreakingSpace;
                        &NonBreakingSpace;&NonBreakingSpace;&NonBreakingSpace; &NonBreakingSpace;&NonBreakingSpace;&NonBreakingSpace;
                        &NonBreakingSpace;&NonBreakingSpace;&NonBreakingSpace;&NonBreakingSpace;
                        &NonBreakingSpace;&NonBreakingSpace;&NonBreakingSpace; &NonBreakingSpace;&NonBreakingSpace;
                        &NonBreakingSpace;&NonBreakingSpace;&NonBreakingSpace; &NonBreakingSpace;&NonBreakingSpace;客服微信
                </p>
                <img style="width: 200px;padding-right: 50px;" alt="个人微信公众号" src="https://img2018.cnblogs.com/common/1741949/201911/1741949-20191119095948011-608816619.png">
                <img style="width: 200px;padding-right: 65px;" alt="微信群" src="https://img2024.cnblogs.com/blog/1232840/202506/1232840-20250610113707419-637869921.png">
                <img style="width: 200px" alt="个人微信" src="https://img2018.cnblogs.com/common/1741949/201911/1741949-20191106101257091-849954564.png">
        </div>
</div><br><br>
来源:https://www.cnblogs.com/du-hong/p/10794684.html
頁: [1]
查看完整版本: python接口自动化(二十八)--html测试 报告——下(详解)