Commit 9e9715b8539b92359dc17cfd7d638b0812a6422b

Authored by 175930106
Committed by liujiqiang
1 parent f425796d

1.优化了不加用例优先级的main_bu.py文件,加入了相对路径和邮件控制

2.解决了test_aduit运行失败无法生成报告的问题(用了self.id)
3.优化了每个用例的注释:每个用例的描述从#变成了'''xxx'''
ps 还有一个查询用例的登录语句超时的问题

Too many changes to show.

To preserve performance only 9 of 25 files are displayed.

src/commons/__pycache__/common.cpython-36.pyc
No preview for this file type
src/commons/api/__pycache__/login.cpython-36.pyc
No preview for this file type
src/commons/common.py
... ... @@ -5,6 +5,7 @@ import operator
5 5 import configparser
6 6 import requests
7 7 import json
  8 +import re
8 9 from commons.Logging import Logger
9 10 import urllib3
10 11 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
... ... @@ -118,101 +119,5 @@ def mark(tag=None,p=None):
118 119 return True
119 120  
120 121  
121   -def get_session(name,password):
122   - pass
123   - return "header"
124   -
125   -def get_token(name,password):
126   - pass
127   - return "token"
128   -
129   -def get_request_Url(api):
130   - return get_api_config(api,'RequestUrl', 'url')
131   -
132   -def get_request_Json(api):
133   - return get_api_config(api,'JsonStructrue', 'requestJson')
134   -
135   -
136   -def dict_diff(a1,b1):
137   - #提取出dict与str或list的异常对比场景
138   - if type(a1)!= type(b1):
139   - print("实际响应json的元素{}的类型{}和期望响应json元素{}的类型{}不一致".format(a1,type(a1),b1,type(b1)))
140   - return False
141   - d1=list(set(a1.keys()).difference(set(b1.keys())))
142   - d2=list(set(b1.keys()).difference(set(a1.keys())))
143   - if len(d1)==0 and len(d2)==0:
144   - return True
145   - else:
146   - print("实际json比期望json多了键值",d1)
147   - print("实际json比期望json少了键值",d2)
148   - return False
149   -
150   -def list_diff(a1,b1):
151   - #提取出list与str或dict的异常对比场景
152   - if type(a1)!= type(b1):
153   - print("实际响应json的元素{}的类型{}和期望响应json元素{}的类型{}不一致".format(a1,type(a1),b1,type(b1)))
154   - return False
155   - elif len(a1)!=len(b1):
156   - print("实际响应json列表长度{}和期望响应json列表长度{}不一致".format(a1,b1))
157   - return False
158   - else:
159   - return True
160   -
161   -#无法判断[[1],[2]]和[[1],[1]]的区别,只能判断列表长度和字典键值是否一致
162   -#a为实际对比的json数据,b为期望的json数据
163   -def compare_json(a,b):
164   - #判断检查数据是否为列表格式的数据
165   - if isinstance(a,list):
166   - if list_diff(a,b)==True:
167   - #为列表时必须进行排序,否则可能出现列表对比的位置不一致
168   - a.sort()
169   - b.sort()
170   - for i in range(len(a)):
171   - #判断列表中的指定的元素是否为字典格式
172   - if compare_json(a[i],b[i]) == False:
173   - return False
174   - else:
175   - return False
176   - #判断检查数据是否为字典格式的数据
177   - elif isinstance(a,dict):
178   - if dict_diff(a,b)==True:
179   - #如果第一层键值相同时,遍历检查内层所有键值
180   - for key in a.keys():
181   - #内层键值为列表数据类型时
182   - if compare_json(a[key],b[key]) == False:
183   - return False
184   - else:
185   - return False
186   - #期望数据非dict和list类型时,直接进行对比,可能会导致{"code":"200"},{"code":"201"}出现不同的情况,所以注释下面的结果
187   -# elif operator.eq(a, b)==False:
188   -# print("实际数据的{}和期望数据的{}不一致".format(a,b))
189   -# return False
190   -
191   -#接口返回值是可控的情况可以用下面这个方法
192   -def cmp_json(actual_data,expect_data):
193   - log.info("======对比期望和实际响应Json格式======")
194   - try:
195   - if len(expect_data)!=0 and len(actual_data)!=0:
196   - expect_data=json.loads(expect_data)
197   - result=compare_json(actual_data,expect_data)
198   - if result==None:
199   - log.info("响应数据和期望数据的Json格式一致")
200   - return True
201   - else:
202   - log.error("66响应数据和期望数据的Json格式不一致")
203   - return False
204   - elif len(expect_data)!=0 and len(actual_data)==0:
205   - log.error("对比数据中,实际响应数据为空")
206   - assert False
207   - elif len(expect_data)==0 and len(actual_data)!=0:
208   - log.error("对比数据中,期望响应数据为空,请检查配置文件")
209   - assert False
210   - elif len(expect_data)==0 and len(actual_data)==0:
211   - log.error("对比数据都为空")
212   - assert False
213   - except Exception as e:
214   - log.error("对比响应数据和期望数据的Json格式 ERROR == %s"%e)
215   - return False
216   -
217   -
218 122  
  123 +# l=get_global_config("global_data", "email", "list")
219 124 \ No newline at end of file
... ...
src/config/global_data.conf
... ... @@ -16,41 +16,12 @@ dbuser=root
16 16 dbpassword=123456
17 17 dbcharset=utf8
18 18  
  19 +[email]
  20 +list=[]
  21 +list1=["lixi@diligrp.com","LI@diligrp.com"]
19 22  
20 23  
21 24  
22   -[RequstHeader_fresh]
23   -header = {
24   - "Host": "10.28.12.154:8085",
25   - "Content-Type": "application/json",
26   - "referer": "https://servicewechat.com/wxd1405e5c40ff05db/0/page-frame.html",
27   - "apiusertoken": "dili-fresh-token",
28   - "charset": "utf-8",
29   - "Accept-Encoding": "gzip",
30   - "User-Agent": "Mozilla/5.0 (Linux; Android 7.0; HUAWEI NXT-AL10 Build/HUAWEINXT-AL10; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/59.0.3071.125 Mobile Safari/537.36 MicroMessenger/6.7.3.1360(0x2607033D) NetType/WIFI Language/zh_CN Process/appbrand2"
31   - }
32   -
33   -[basic_data_prepare]
34   -#客户
35   -instert_customer=INSERT INTO `customer` VALUES ('16', '00010966', null, '', '123456789012345678901234567890*a', '15111888983', 'wechat', null, 'oK0VK5HUZDfMbXw-1oMVr0--GZ4g', '1', '0', 'S002300', '00011000', 'unknown', ' ', null, '1', '2019-03-27 17:05:00', '2019-02-11 17:28:26', null);
36   -#自提点
37   -instert_shop=INSERT INTO `shop` VALUES ('116', '成都SAC新店0001', 'S001953', 'W000101', '00010953', '四川省成都市青羊区天府广场', null, '510100', null, '30.663420320381004', '104.07219216758062', null, '李老板', '15111888983', null, null, '天府广场', '3', null, '1', '1', '2019-02-11 14:12:01', null, null, null);
38   -#商品
39   -instert_product=INSERT INTO product.product VALUES ('301', '16', '猕猴桃', 'PD2019021000000001', '猕猴桃', 'dili-fresh/groupbuy/7f9fc034c2ec41e18b7560fc42a25abd', '2019-01-29 08:00:00', '2020-12-12 00:00:00', '2019-02-02 10:00:00', '2019-12-11 20:00:00', '600', '<p>预售商品,次日取货。</p><p>预计到店时间:2月3日14点之后。</p><p>到货后群内通知。</p><p><img style=\"max-width:100%;\" src=\"http://img10.nong12.com/dili-fresh/groupbuy/c4aa09d06af948f09269cd0d367fa623\"><br></p><p><br></p>', '2019-01-29 15:48:19', '1', '2019-02-02 10:13:33', '39', '4', '0', '400', '0');
40   -#商品标签
41   -instert_product_tag=INSERT INTO `product_tag` VALUES ('818', '1', '301', null, null, '2019-04-02 15:50:48', '2019-04-02 15:50:45');
42   -#标签
43   -instert_tag=INSERT INTO `tag` VALUES ('1', '年货爆款', '26', '2019-01-14 11:24:48', '26', '2019-03-05 14:13:46', '27');
44   -#成都商品库存
45   -instert_product_stock1=INSERT INTO `area_stock` VALUES ('502', '301', '0', '740', '185', '925', '1', '510100', '2019-04-01 17:11:28', '999', null, '2019-02-11 14:20:50', null, '490', '573', '3.00', '1', '0');
46   -#沈阳商品库存
47   -instert_product_stock2=INSERT INTO `area_stock` VALUES ('503', '301', '0', '998', '2', '1000', '1', '210100', '2019-04-01 17:11:28', '999', null, '2019-02-11 14:20:50', null, '9', '5', '3.00', '1', '0');
48   -#钱包余额
49   -instert_wallet=INSERT INTO `wallet` VALUES ('11845', '00010953', '1000', '0', '1000', '1', '0', '2019-02-11 12:08:50', '2019-02-11 12:08:50', null, null);
50   -#优惠券
51   -instert_coupon=INSERT INTO `customer_coupon` VALUES ('10014', '0', '00010966', 'C000452', '1', null, '1', '1', '600', '0', '2019-03-12 00:00:00', '2019-04-30 23:59:59', '2', '2019-03-12 11:02:08', null, '3');
52   -
53   -
54 25  
55 26  
56 27  
... ...
src/main_bu.py
1 1 #!/usr/bin/python
2 2 # -*- coding: UTF-8 -*-
3 3 import os,time
  4 +import sys
4 5 import unittest
  6 +import re
5 7 import HTMLTestRunner_cn
6   -import commons.SendEmail as em
  8 +from commons import SendEmail as em
  9 +from commons import common as com
7 10  
8   -
9   -if __name__ == "__main__":
10   -
11   - #递归查询测试用例
12   - listaa = "E:\\EclipseWorkspace\\WorksapceDemo\\Request-demo-dili\\src\\testcase"
13   - def Create_Testcase_suite():
14   - '''可以拓展该方法,为读取相对路径,然后传入指定文件测试用例:
15   - Create_Testcase_suite(最顶层用例文件Case_Sences,下一级具体接口文件,)
16   - '''
17   -
18   - testunit=unittest.TestSuite()
19   - #discover会展示有多少test_*.py的文件,然后for依次添加这些文件夹下test_*.py里面的testcase
20   - #这个方法会识别指定目录下所有test_*.py文件和test_*.py文件中所有class *(unittest.TestCase)以及其中的case
21   - #每一个接口文件下面都得添加一个_init_.py不然无法识别该文件下的test_*.py
22   - #_init_.py把所在目录当作一个package处理, from-import 语句导入子包时需要用到它。 如果没有用到, 他们可以是空文件
23   - #如引入package.module下的所有模块from package.module import *
24   - #submitOrder文件下不加_init_.py时,test_submitOrder文件无法被搜索
25   - discover=unittest.defaultTestLoader.discover(listaa,pattern='test_*.py',top_level_dir=None)
26   - #dicover会按照class为一个单位把每一个文件下的每一个class单位下的所有用例都加载出来
27   - print(discover)
28   - for test_suite in discover:
29   - testunit.addTests(test_suite)
  11 +def Create_Testcase_suite():
  12 + '''创建测试套件'''
  13 + testunit=unittest.TestSuite()
  14 + discover=unittest.defaultTestLoader.discover("./testcase/",pattern='test_*.py',top_level_dir=None)
  15 + print(discover)
  16 + for test_suite in discover:
  17 + testunit.addTests(test_suite)
30 18 # for test_case in test_suite:
31 19 # testunit.addTests(test_case)
32 20 # print(testunit)
33   - return testunit
34   - print(Create_Testcase_suite())
35   - #创建测试报告
36   -# now = time.strftime("%Y-%m-%d %H_%M_%S",time.localtime())
37   -# filename="E:\\EclipseWorkspace\\WorksapceDemo\\Request-demo2\\src\\report\\"+now+"_result.html"
38   -# fp=open(filename,'wb')
39   -#
40   -# runner=HTMLTestRunner_cn.HTMLTestRunner(
41   -# stream=fp,
42   -# title=u'搜索功能测试报告',
43   -# description=u'用例执行情况:',
44   -# verbosity = 2)
45   -#
46   -# runner.run(Create_Testcase_suite())
  21 + print(testunit)
  22 + return testunit
47 23  
  24 +
  25 +def Run_Testcase(testsuit):
  26 + '''运行测试用例并生成报告'''
  27 + now = time.strftime("%Y-%m-%d %H_%M_%S",time.localtime())
  28 + path=os.path.dirname(os.path.abspath(sys.argv[0]))
  29 + report_file=path+"/report/"+now+"_result.html"
  30 + #创建报告文件
  31 + fp=open(report_file,'wb')
48 32  
49   -# #发送测试报告
50   -# em.send_email(filename)
51   -#
52   -# fp.close()
53   -#
54   -# data = open(filename, 'r')
55   -# print(data.read())
56 33 \ No newline at end of file
  34 + runner=HTMLTestRunner_cn.HTMLTestRunner(
  35 + stream=fp,
  36 + title=u'搜索功能测试报告',
  37 + description=u'用例执行情况:',
  38 + verbosity = 2)
  39 + #执行用例
  40 + runner.run(testsuit)
  41 + #关闭文件
  42 + fp.close()
  43 + return report_file
  44 +
  45 +def Send_email(filename):
  46 + '''判断邮件发送逻辑'''
  47 + l=eval(com.get_global_config("global_data", "email","list").lower())
  48 + if type(l)!=type([]):
  49 + raise Exception("error,pls input list type send-email address")
  50 + elif len(l)==0:
  51 + print("\n list of send-email is null,won't send email!")
  52 + elif len(l)!=0:
  53 + for i in l:
  54 + print(" check send-email format : {}".format(i))
  55 + if re.match(r'^[0-9a-zA-Z_]{1,19}@[0-9a-zA-Z]{1,13}\.[com,cn,net]{1,3}$',i):
  56 + pass
  57 + else:
  58 + raise Exception("error,pls check your send-email format")
  59 + #发送邮件
  60 + em.send_email(filename, l)
  61 + else:
  62 + print("\n Haven't sent the email,pls check send-email address!")
  63 +
  64 +
  65 +
  66 +if __name__ == "__main__":
  67 +# #创建测试套,运行测试用例,生成报告
  68 + report=Run_Testcase(Create_Testcase_suite())
  69 + #发送邮件
  70 + Send_email(report)
... ...
src/report/2021-05-14 15_46_30_result.html renamed to src/report/2021-06-22 15_57_43_result.html
... ... @@ -420,9 +420,9 @@ function hide_img(obj){
420 420 </script>
421 421 <div class='heading'>
422 422 <h1>搜索功能测试报告</h1>
423   -<p class='attribute'><strong>开始时间:</strong> 2021-05-14 15:46:30</p>
424   -<p class='attribute'><strong>耗时:</strong> 0:00:00.008641</p>
425   -<p class='attribute'><strong>状态:</strong> <span class="tj passCase">Pass</span>:6 <span class="tj failCase">Failure</span>:3 <span class="tj skipCase">Skip</span>:12 <span class="tj">通过率</span>:66.7%</p>
  423 +<p class='attribute'><strong>开始时间:</strong> 2021-06-22 15:57:43</p>
  424 +<p class='attribute'><strong>耗时:</strong> 0:00:11.075317</p>
  425 +<p class='attribute'><strong>状态:</strong> <span class="tj passCase">Pass</span>:14 <span class="tj failCase">Failure</span>:3 <span class="tj skipCase">Skip</span>:1 <span class="tj">通过率</span>:82.4%</p>
426 426  
427 427 <p class='description'>用例执行情况:</p>
428 428 </div>
... ... @@ -435,12 +435,12 @@ function hide_img(obj){
435 435 </div>
436 436  
437 437 <div id='show_detail_line' style=" float: left; width: 100%;">
438   -<a class="abstract detail_button" href='javascript:showCase(0,1)'>概要[66.67%]</a>
439   -<a class="passed detail_button" href='javascript:showCase(1,1)'>通过[6]</a>
  438 +<a class="abstract detail_button" href='javascript:showCase(0,1)'>概要[82.35%]</a>
  439 +<a class="passed detail_button" href='javascript:showCase(1,1)'>通过[14]</a>
440 440 <a class="failed detail_button" href='javascript:showCase(2,1)'>失败[3]</a>
441 441 <a class="errored detail_button" href='javascript:showCase(3,1)'>错误[0]</a>
442   -<a class="skiped detail_button" href='javascript:showCase(4,1)'>跳过[12]</a>
443   -<a class="all detail_button" href='javascript:showCase(5,1)'>所有[9]</a>
  442 +<a class="skiped detail_button" href='javascript:showCase(4,1)'>跳过[1]</a>
  443 +<a class="all detail_button" href='javascript:showCase(5,1)'>所有[17]</a>
444 444 </div>
445 445  
446 446 <table id='result_table'>
... ... @@ -463,18 +463,18 @@ function hide_img(obj){
463 463 <th>错误截图</th>
464 464 </tr>
465 465  
466   -<tr class='failClass'>
467   - <td>test_skip_demo.test_Userskip.test_Userskip_demo1</td>
468   - <td>6</td>
  466 +<tr class='passClass'>
  467 + <td>doAdd.test_doAdd.test_doAdd: 新增登记接口</td>
469 468 <td>3</td>
470 469 <td>3</td>
471 470 <td>0</td>
472   - <td><a href="javascript:showClassDetail('c1.1',6)">详情</a></td>
  471 + <td>0</td>
  472 + <td><a href="javascript:showClassDetail('c1.1',3)">详情</a></td>
473 473 <td>&nbsp;</td>
474 474 </tr>
475 475  
476 476 <tr id='pt1.1.1' class='hiddenRow'>
477   - <td ><div class='testcase'>test_1_userskip</div></td>
  477 + <td ><div class='testcase'>test_01_doAdd: 成功新增一个商品为大白菜的报备单,重量为111</div></td>
478 478 <td colspan='5' align='center'>
479 479  
480 480 <!--css div popup start-->
... ... @@ -489,7 +489,7 @@ function hide_img(obj){
489 489 </div>
490 490 <pre>
491 491  
492   -pt1.1.1: in test_1
  492 +pt1.1.1: {'code': '200', 'message': 'OK', 'result': 'OK', 'success': True}
493 493  
494 494  
495 495 </pre>
... ... @@ -500,26 +500,23 @@ pt1.1.1: in test_1
500 500 <td>无截图</td>
501 501 </tr>
502 502  
503   -<tr id='ft1.1.2' class='none'>
504   - <td ><div class='testcase'>test_2_userskip</div></td>
  503 +<tr id='pt1.1.2' class='hiddenRow'>
  504 + <td ><div class='testcase'>test_02_doAdd: 成功新增一个商品为鲜花生的报备单,重量为111</div></td>
505 505 <td colspan='5' align='center'>
506 506  
507 507 <!--css div popup start-->
508   - <span class='status failCase'>
509   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.1.2')" >
510   - 失败</a></span>
  508 + <span class='status passCase'>
  509 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.1.2')" >
  510 + 通过</a></span>
511 511  
512   - <div id='div_ft1.1.2' class="popup_window">
  512 + <div id='div_pt1.1.2' class="popup_window">
513 513 <div style='text-align: right; color:red;cursor:pointer'>
514   - <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.1.2').style.display = 'none' " >
  514 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.1.2').style.display = 'none' " >
515 515 [x]</a>
516 516 </div>
517 517 <pre>
518 518  
519   -ft1.1.2: Traceback (most recent call last):
520   - File "E:\EclipseWorkspace\WorksapceDemo\Request-demo\src\testcase\test_skip_demo\test_Userskip.py", line 15, in test_2_userskip
521   - assert False
522   -AssertionError
  519 +pt1.1.2: {'code': '200', 'message': 'OK', 'result': 'OK', 'success': True}
523 520  
524 521  
525 522 </pre>
... ... @@ -530,26 +527,23 @@ AssertionError
530 527 <td>无截图</td>
531 528 </tr>
532 529  
533   -<tr id='ft1.1.3' class='none'>
534   - <td ><div class='testcase'>test_2_userskip: _retry:1</div></td>
  530 +<tr id='pt1.1.3' class='hiddenRow'>
  531 + <td ><div class='testcase'>test_03_doAdd: 用错误的用户来新增,无法新增</div></td>
535 532 <td colspan='5' align='center'>
536 533  
537 534 <!--css div popup start-->
538   - <span class='status failCase'>
539   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.1.3')" >
540   - 失败</a></span>
  535 + <span class='status passCase'>
  536 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.1.3')" >
  537 + 通过</a></span>
541 538  
542   - <div id='div_ft1.1.3' class="popup_window">
  539 + <div id='div_pt1.1.3' class="popup_window">
543 540 <div style='text-align: right; color:red;cursor:pointer'>
544   - <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.1.3').style.display = 'none' " >
  541 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.1.3').style.display = 'none' " >
545 542 [x]</a>
546 543 </div>
547 544 <pre>
548 545  
549   -ft1.1.3: Traceback (most recent call last):
550   - File "E:\EclipseWorkspace\WorksapceDemo\Request-demo\src\testcase\test_skip_demo\test_Userskip.py", line 15, in test_2_userskip
551   - assert False
552   -AssertionError
  546 +pt1.1.3: {'code': '5000', 'message': '查询客户信息失败', 'result': '查询客户信息失败', 'success': False}
553 547  
554 548  
555 549 </pre>
... ... @@ -560,53 +554,34 @@ AssertionError
560 554 <td>无截图</td>
561 555 </tr>
562 556  
563   -<tr id='ft1.1.4' class='none'>
564   - <td ><div class='testcase'>test_2_userskip: _retry:2</div></td>
565   - <td colspan='5' align='center'>
566   -
567   - <!--css div popup start-->
568   - <span class='status failCase'>
569   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.1.4')" >
570   - 失败</a></span>
571   -
572   - <div id='div_ft1.1.4' class="popup_window">
573   - <div style='text-align: right; color:red;cursor:pointer'>
574   - <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.1.4').style.display = 'none' " >
575   - [x]</a>
576   - </div>
577   - <pre>
578   -
579   -ft1.1.4: Traceback (most recent call last):
580   - File "E:\EclipseWorkspace\WorksapceDemo\Request-demo\src\testcase\test_skip_demo\test_Userskip.py", line 15, in test_2_userskip
581   - assert False
582   -AssertionError
583   -
584   -
585   - </pre>
586   - </div>
587   - <!--css div popup end-->
588   -
589   - </td>
590   - <td>无截图</td>
  557 +<tr class='passClass'>
  558 + <td>doAudit.test_doAudit.test_doAudit: #登记单审核接口</td>
  559 + <td>4</td>
  560 + <td>4</td>
  561 + <td>0</td>
  562 + <td>0</td>
  563 + <td><a href="javascript:showClassDetail('c1.2',4)">详情</a></td>
  564 + <td>&nbsp;</td>
591 565 </tr>
592 566  
593   -<tr id='st1.1.5' class='none'>
594   - <td ><div class='testcase'>test_3_userskip</div></td>
  567 +<tr id='pt1.2.1' class='hiddenRow'>
  568 + <td ><div class='testcase'>test_01_doAudit: 审核通过</div></td>
595 569 <td colspan='5' align='center'>
596 570  
597 571 <!--css div popup start-->
598 572 <span class='status passCase'>
599   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_st1.1.5')" >
600   - 跳过</a></span>
  573 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.2.1')" >
  574 + 通过</a></span>
601 575  
602   - <div id='div_st1.1.5' class="popup_window">
  576 + <div id='div_pt1.2.1' class="popup_window">
603 577 <div style='text-align: right; color:red;cursor:pointer'>
604   - <a onfocus='this.blur();' onclick="document.getElementById('div_st1.1.5').style.display = 'none' " >
  578 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.2.1').style.display = 'none' " >
605 579 [x]</a>
606 580 </div>
607 581 <pre>
608 582  
609   -st1.1.5: [test_3_userskip] do not excute,because [test_2_userskip] is failed
  583 +pt1.2.1: {'code': '200', 'message': '操作成功', 'result': '操作成功', 'success': True}
  584 +
610 585  
611 586 </pre>
612 587 </div>
... ... @@ -616,23 +591,23 @@ st1.1.5: [test_3_userskip] do not excute,because [test_2_userskip] is failed
616 591 <td>无截图</td>
617 592 </tr>
618 593  
619   -<tr id='pt1.1.6' class='hiddenRow'>
620   - <td ><div class='testcase'>test_4_userskip</div></td>
  594 +<tr id='pt1.2.2' class='hiddenRow'>
  595 + <td ><div class='testcase'>test_02_doAudit: 审核不通过</div></td>
621 596 <td colspan='5' align='center'>
622 597  
623 598 <!--css div popup start-->
624 599 <span class='status passCase'>
625   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.1.6')" >
  600 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.2.2')" >
626 601 通过</a></span>
627 602  
628   - <div id='div_pt1.1.6' class="popup_window">
  603 + <div id='div_pt1.2.2' class="popup_window">
629 604 <div style='text-align: right; color:red;cursor:pointer'>
630   - <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.1.6').style.display = 'none' " >
  605 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.2.2').style.display = 'none' " >
631 606 [x]</a>
632 607 </div>
633 608 <pre>
634 609  
635   -pt1.1.6: in test_4
  610 +pt1.2.2: {'code': '200', 'message': '操作成功', 'result': '操作成功', 'success': True}
636 611  
637 612  
638 613 </pre>
... ... @@ -643,23 +618,24 @@ pt1.1.6: in test_4
643 618 <td>无截图</td>
644 619 </tr>
645 620  
646   -<tr id='st1.1.7' class='none'>
647   - <td ><div class='testcase'>test_5_userskip</div></td>
  621 +<tr id='pt1.2.3' class='hiddenRow'>
  622 + <td ><div class='testcase'>test_03_doAudit: 审核不通过</div></td>
648 623 <td colspan='5' align='center'>
649 624  
650 625 <!--css div popup start-->
651 626 <span class='status passCase'>
652   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_st1.1.7')" >
653   - 跳过</a></span>
  627 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.2.3')" >
  628 + 通过</a></span>
654 629  
655   - <div id='div_st1.1.7' class="popup_window">
  630 + <div id='div_pt1.2.3' class="popup_window">
656 631 <div style='text-align: right; color:red;cursor:pointer'>
657   - <a onfocus='this.blur();' onclick="document.getElementById('div_st1.1.7').style.display = 'none' " >
  632 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.2.3').style.display = 'none' " >
658 633 [x]</a>
659 634 </div>
660 635 <pre>
661 636  
662   -st1.1.7: [test_5_userskip] do not excute,because [test_2_userskip] is failed
  637 +pt1.2.3: {'code': '200', 'message': '操作成功', 'result': '操作成功', 'success': True}
  638 +
663 639  
664 640 </pre>
665 641 </div>
... ... @@ -669,23 +645,23 @@ st1.1.7: [test_5_userskip] do not excute,because [test_2_userskip] is failed
669 645 <td>无截图</td>
670 646 </tr>
671 647  
672   -<tr id='pt1.1.8' class='hiddenRow'>
673   - <td ><div class='testcase'>test_6</div></td>
  648 +<tr id='pt1.2.4' class='hiddenRow'>
  649 + <td ><div class='testcase'>test_04_doAudit: 审核一个已经完成审核的登记单</div></td>
674 650 <td colspan='5' align='center'>
675 651  
676 652 <!--css div popup start-->
677 653 <span class='status passCase'>
678   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.1.8')" >
  654 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.2.4')" >
679 655 通过</a></span>
680 656  
681   - <div id='div_pt1.1.8' class="popup_window">
  657 + <div id='div_pt1.2.4' class="popup_window">
682 658 <div style='text-align: right; color:red;cursor:pointer'>
683   - <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.1.8').style.display = 'none' " >
  659 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.2.4').style.display = 'none' " >
684 660 [x]</a>
685 661 </div>
686 662 <pre>
687 663  
688   -pt1.1.8: in test_6
  664 +pt1.2.4: {'code': '5000', 'message': '操作失败,数据状态已改变', 'result': '操作失败,数据状态已改变', 'success': False}
689 665  
690 666  
691 667 </pre>
... ... @@ -696,33 +672,36 @@ pt1.1.8: in test_6
696 672 <td>无截图</td>
697 673 </tr>
698 674  
699   -<tr class='passClass'>
700   - <td>test_skip_demo.test_skipclass.test_skipclass_demo1</td>
701   - <td>0</td>
702   - <td>0</td>
703   - <td>0</td>
  675 +<tr class='failClass'>
  676 + <td>fieldConfig.test_fieldConfig.test_fieldConfig: Unittest用例结构的简单的认识</td>
  677 + <td>3</td>
  678 + <td>2</td>
  679 + <td>1</td>
704 680 <td>0</td>
705   - <td><a href="javascript:showClassDetail('c1.2',0)">详情</a></td>
  681 + <td><a href="javascript:showClassDetail('c1.3',3)">详情</a></td>
706 682 <td>&nbsp;</td>
707 683 </tr>
708 684  
709   -<tr id='st1.2.1' class='none'>
710   - <td ><div class='testcase'>test_1_skipclass</div></td>
  685 +<tr id='pt1.3.1' class='hiddenRow'>
  686 + <td ><div class='testcase'>test_01_fieldConfig</div></td>
711 687 <td colspan='5' align='center'>
712 688  
713 689 <!--css div popup start-->
714 690 <span class='status passCase'>
715   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_st1.2.1')" >
716   - 跳过</a></span>
  691 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.3.1')" >
  692 + 通过</a></span>
717 693  
718   - <div id='div_st1.2.1' class="popup_window">
  694 + <div id='div_pt1.3.1' class="popup_window">
719 695 <div style='text-align: right; color:red;cursor:pointer'>
720   - <a onfocus='this.blur();' onclick="document.getElementById('div_st1.2.1').style.display = 'none' " >
  696 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.3.1').style.display = 'none' " >
721 697 [x]</a>
722 698 </div>
723 699 <pre>
724 700  
725   -st1.2.1: skip directly
  701 +pt1.3.1: setUp
  702 +test_01_fieldConfig
  703 +tearDown
  704 +
726 705  
727 706 </pre>
728 707 </div>
... ... @@ -732,23 +711,26 @@ st1.2.1: skip directly
732 711 <td>无截图</td>
733 712 </tr>
734 713  
735   -<tr id='st1.2.2' class='none'>
736   - <td ><div class='testcase'>test_2_skipclass</div></td>
  714 +<tr id='pt1.3.2' class='hiddenRow'>
  715 + <td ><div class='testcase'>test_02_fieldConfig</div></td>
737 716 <td colspan='5' align='center'>
738 717  
739 718 <!--css div popup start-->
740 719 <span class='status passCase'>
741   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_st1.2.2')" >
742   - 跳过</a></span>
  720 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.3.2')" >
  721 + 通过</a></span>
743 722  
744   - <div id='div_st1.2.2' class="popup_window">
  723 + <div id='div_pt1.3.2' class="popup_window">
745 724 <div style='text-align: right; color:red;cursor:pointer'>
746   - <a onfocus='this.blur();' onclick="document.getElementById('div_st1.2.2').style.display = 'none' " >
  725 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.3.2').style.display = 'none' " >
747 726 [x]</a>
748 727 </div>
749 728 <pre>
750 729  
751   -st1.2.2: skip directly
  730 +pt1.3.2: setUp
  731 +test_02_fieldConfig
  732 +tearDown
  733 +
752 734  
753 735 </pre>
754 736 </div>
... ... @@ -758,23 +740,30 @@ st1.2.2: skip directly
758 740 <td>无截图</td>
759 741 </tr>
760 742  
761   -<tr id='st1.2.3' class='none'>
762   - <td ><div class='testcase'>test_3_skipclass</div></td>
  743 +<tr id='ft1.3.3' class='none'>
  744 + <td ><div class='testcase'>test_03_fieldConfig</div></td>
763 745 <td colspan='5' align='center'>
764 746  
765 747 <!--css div popup start-->
766   - <span class='status passCase'>
767   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_st1.2.3')" >
768   - 跳过</a></span>
  748 + <span class='status failCase'>
  749 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.3.3')" >
  750 + 失败</a></span>
769 751  
770   - <div id='div_st1.2.3' class="popup_window">
  752 + <div id='div_ft1.3.3' class="popup_window">
771 753 <div style='text-align: right; color:red;cursor:pointer'>
772   - <a onfocus='this.blur();' onclick="document.getElementById('div_st1.2.3').style.display = 'none' " >
  754 + <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.3.3').style.display = 'none' " >
773 755 [x]</a>
774 756 </div>
775 757 <pre>
776 758  
777   -st1.2.3: skip directly
  759 +ft1.3.3: setUp
  760 +test_03_fieldConfig
  761 +tearDown
  762 +Traceback (most recent call last):
  763 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\fieldConfig\test_fieldConfig.py", line 26, in test_03_fieldConfig
  764 + self.assertEqual(100, 200, "测试使用")
  765 +AssertionError: 100 != 200 : 测试使用
  766 +
778 767  
779 768 </pre>
780 769 </div>
... ... @@ -784,23 +773,23 @@ st1.2.3: skip directly
784 773 <td>无截图</td>
785 774 </tr>
786 775  
787   -<tr id='st1.2.4' class='none'>
788   - <td ><div class='testcase'>test_4_skipclass</div></td>
  776 +<tr id='st1.3.4' class='none'>
  777 + <td ><div class='testcase'>test_04_fieldConfig</div></td>
789 778 <td colspan='5' align='center'>
790 779  
791 780 <!--css div popup start-->
792 781 <span class='status passCase'>
793   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_st1.2.4')" >
  782 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_st1.3.4')" >
794 783 跳过</a></span>
795 784  
796   - <div id='div_st1.2.4' class="popup_window">
  785 + <div id='div_st1.3.4' class="popup_window">
797 786 <div style='text-align: right; color:red;cursor:pointer'>
798   - <a onfocus='this.blur();' onclick="document.getElementById('div_st1.2.4').style.display = 'none' " >
  787 + <a onfocus='this.blur();' onclick="document.getElementById('div_st1.3.4').style.display = 'none' " >
799 788 [x]</a>
800 789 </div>
801 790 <pre>
802 791  
803   -st1.2.4: skip directly
  792 +st1.3.4: 执行时强制跳过该用例
804 793  
805 794 </pre>
806 795 </div>
... ... @@ -810,111 +799,65 @@ st1.2.4: skip directly
810 799 <td>无截图</td>
811 800 </tr>
812 801  
813   -<tr id='st1.2.5' class='none'>
814   - <td ><div class='testcase'>test_5_skipclass</div></td>
815   - <td colspan='5' align='center'>
816   -
817   - <!--css div popup start-->
818   - <span class='status passCase'>
819   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_st1.2.5')" >
820   - 跳过</a></span>
821   -
822   - <div id='div_st1.2.5' class="popup_window">
823   - <div style='text-align: right; color:red;cursor:pointer'>
824   - <a onfocus='this.blur();' onclick="document.getElementById('div_st1.2.5').style.display = 'none' " >
825   - [x]</a>
826   - </div>
827   - <pre>
828   -
829   -st1.2.5: skip directly
830   -
831   - </pre>
832   - </div>
833   - <!--css div popup end-->
  802 +<tr class='passClass'>
  803 + <td>login.test_login.test_login: 登录接口</td>
  804 + <td>3</td>
  805 + <td>3</td>
  806 + <td>0</td>
  807 + <td>0</td>
  808 + <td><a href="javascript:showClassDetail('c1.4',3)">详情</a></td>
  809 + <td>&nbsp;</td>
  810 +</tr>
834 811  
835   - </td>
  812 +<tr id='pt1.4.1' class='hiddenRow'>
  813 + <td><div class='testcase'>test_01_login: 账户密码都正确</div></td>
  814 + <td colspan='5' align='center'><span class='status passCase'>通过</span></td>
836 815 <td>无截图</td>
837 816 </tr>
838 817  
839   -<tr id='st1.2.6' class='none'>
840   - <td ><div class='testcase'>test_6_skipclass</div></td>
841   - <td colspan='5' align='center'>
842   -
843   - <!--css div popup start-->
844   - <span class='status passCase'>
845   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_st1.2.6')" >
846   - 跳过</a></span>
847   -
848   - <div id='div_st1.2.6' class="popup_window">
849   - <div style='text-align: right; color:red;cursor:pointer'>
850   - <a onfocus='this.blur();' onclick="document.getElementById('div_st1.2.6').style.display = 'none' " >
851   - [x]</a>
852   - </div>
853   - <pre>
854   -
855   -st1.2.6: skip directly
856   -
857   - </pre>
858   - </div>
859   - <!--css div popup end-->
860   -
861   - </td>
  818 +<tr id='pt1.4.2' class='hiddenRow'>
  819 + <td><div class='testcase'>test_02_login: 密码错误</div></td>
  820 + <td colspan='5' align='center'><span class='status passCase'>通过</span></td>
862 821 <td>无截图</td>
863 822 </tr>
864 823  
865   -<tr id='st1.2.7' class='none'>
866   - <td ><div class='testcase'>test_7_skipclass</div></td>
867   - <td colspan='5' align='center'>
868   -
869   - <!--css div popup start-->
870   - <span class='status passCase'>
871   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_st1.2.7')" >
872   - 跳过</a></span>
873   -
874   - <div id='div_st1.2.7' class="popup_window">
875   - <div style='text-align: right; color:red;cursor:pointer'>
876   - <a onfocus='this.blur();' onclick="document.getElementById('div_st1.2.7').style.display = 'none' " >
877   - [x]</a>
878   - </div>
879   - <pre>
880   -
881   -st1.2.7: skip directly
882   -
883   - </pre>
884   - </div>
885   - <!--css div popup end-->
886   -
887   - </td>
  824 +<tr id='pt1.4.3' class='hiddenRow'>
  825 + <td><div class='testcase'>test_03_login: 账户错误</div></td>
  826 + <td colspan='5' align='center'><span class='status passCase'>通过</span></td>
888 827 <td>无截图</td>
889 828 </tr>
890 829  
891   -<tr class='passClass'>
892   - <td>test_skip_demo.test_Systemskip.test_systemskip_demo1</td>
893   - <td>3</td>
894   - <td>3</td>
  830 +<tr class='failClass'>
  831 + <td>upStream.test_upStream.test_upStream1: 上游企业列表查询接口</td>
  832 + <td>2</td>
895 833 <td>0</td>
  834 + <td>2</td>
896 835 <td>0</td>
897   - <td><a href="javascript:showClassDetail('c1.3',3)">详情</a></td>
  836 + <td><a href="javascript:showClassDetail('c1.5',2)">详情</a></td>
898 837 <td>&nbsp;</td>
899 838 </tr>
900 839  
901   -<tr id='pt1.3.1' class='hiddenRow'>
902   - <td ><div class='testcase'>test_1_systemskip</div></td>
  840 +<tr id='ft1.5.1' class='none'>
  841 + <td ><div class='testcase'>test_01_upStream1: 成功查询上下游企业,无过滤条件</div></td>
903 842 <td colspan='5' align='center'>
904 843  
905 844 <!--css div popup start-->
906   - <span class='status passCase'>
907   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.3.1')" >
908   - 通过</a></span>
  845 + <span class='status failCase'>
  846 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.5.1')" >
  847 + 失败</a></span>
909 848  
910   - <div id='div_pt1.3.1' class="popup_window">
  849 + <div id='div_ft1.5.1' class="popup_window">
911 850 <div style='text-align: right; color:red;cursor:pointer'>
912   - <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.3.1').style.display = 'none' " >
  851 + <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.5.1').style.display = 'none' " >
913 852 [x]</a>
914 853 </div>
915 854 <pre>
916 855  
917   -pt1.3.1: in test_1
  856 +ft1.5.1: {'code': '401', 'message': '登录超时', 'result': '登录超时', 'success': False}
  857 +Traceback (most recent call last):
  858 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\upStream\test_upStream.py", line 27, in test_01_upStream1
  859 + self.assertTrue("total" in re.json().keys())
  860 +AssertionError: False is not true
918 861  
919 862  
920 863 </pre>
... ... @@ -925,23 +868,28 @@ pt1.3.1: in test_1
925 868 <td>无截图</td>
926 869 </tr>
927 870  
928   -<tr id='st1.3.2' class='none'>
929   - <td ><div class='testcase'>test_2_systemskip</div></td>
  871 +<tr id='ft1.5.2' class='none'>
  872 + <td ><div class='testcase'>test_02_upStream1: 成功查询上下游企业,加入企业/个人名称过滤条件</div></td>
930 873 <td colspan='5' align='center'>
931 874  
932 875 <!--css div popup start-->
933   - <span class='status passCase'>
934   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_st1.3.2')" >
935   - 跳过</a></span>
  876 + <span class='status failCase'>
  877 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.5.2')" >
  878 + 失败</a></span>
936 879  
937   - <div id='div_st1.3.2' class="popup_window">
  880 + <div id='div_ft1.5.2' class="popup_window">
938 881 <div style='text-align: right; color:red;cursor:pointer'>
939   - <a onfocus='this.blur();' onclick="document.getElementById('div_st1.3.2').style.display = 'none' " >
  882 + <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.5.2').style.display = 'none' " >
940 883 [x]</a>
941 884 </div>
942 885 <pre>
943 886  
944   -st1.3.2: skip directly
  887 +ft1.5.2: {'code': '401', 'message': '登录超时', 'result': '登录超时', 'success': False}
  888 +Traceback (most recent call last):
  889 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\upStream\test_upStream.py", line 40, in test_02_upStream1
  890 + self.assertTrue("legalPerson':'哈哈哈'" in str(re.json()).replace(" ",""))
  891 +AssertionError: False is not true
  892 +
945 893  
946 894 </pre>
947 895 </div>
... ... @@ -951,49 +899,33 @@ st1.3.2: skip directly
951 899 <td>无截图</td>
952 900 </tr>
953 901  
954   -<tr id='st1.3.3' class='none'>
955   - <td ><div class='testcase'>test_3_systemskip</div></td>
956   - <td colspan='5' align='center'>
957   -
958   - <!--css div popup start-->
959   - <span class='status passCase'>
960   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_st1.3.3')" >
961   - 跳过</a></span>
962   -
963   - <div id='div_st1.3.3' class="popup_window">
964   - <div style='text-align: right; color:red;cursor:pointer'>
965   - <a onfocus='this.blur();' onclick="document.getElementById('div_st1.3.3').style.display = 'none' " >
966   - [x]</a>
967   - </div>
968   - <pre>
969   -
970   -st1.3.3: TEST skipIf True
971   -
972   - </pre>
973   - </div>
974   - <!--css div popup end-->
975   -
976   - </td>
977   - <td>无截图</td>
  902 +<tr class='passClass'>
  903 + <td>upStream.test_upStream.test_upStream2: 上游企业列表查询接口2</td>
  904 + <td>2</td>
  905 + <td>2</td>
  906 + <td>0</td>
  907 + <td>0</td>
  908 + <td><a href="javascript:showClassDetail('c1.6',2)">详情</a></td>
  909 + <td>&nbsp;</td>
978 910 </tr>
979 911  
980   -<tr id='pt1.3.4' class='hiddenRow'>
981   - <td ><div class='testcase'>test_4_systemskip</div></td>
  912 +<tr id='pt1.6.1' class='hiddenRow'>
  913 + <td ><div class='testcase'>test_01_upStream2: 成功查询上下游企业,加入企业/个人名称过滤条件</div></td>
982 914 <td colspan='5' align='center'>
983 915  
984 916 <!--css div popup start-->
985 917 <span class='status passCase'>
986   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.3.4')" >
  918 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.6.1')" >
987 919 通过</a></span>
988 920  
989   - <div id='div_pt1.3.4' class="popup_window">
  921 + <div id='div_pt1.6.1' class="popup_window">
990 922 <div style='text-align: right; color:red;cursor:pointer'>
991   - <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.3.4').style.display = 'none' " >
  923 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.6.1').style.display = 'none' " >
992 924 [x]</a>
993 925 </div>
994 926 <pre>
995 927  
996   -pt1.3.4: in test_4
  928 +pt1.6.1: {'total': 5, 'rows': [{'upORdown': '上游', '$_upORdown': 10, 'created': '2021-05-10 09:42:51', 'idCard': '', '$_upstreamType': 10, 'marketId': 8, 'cardNoBackUrl': '', 'telphone': '13540782311', 'cardNoFrontUrl': '', 'name': '111', 'modified': '2021-05-10 09:42:51', 'userNames': '雪额外大', 'id': 333, 'sourceUserId': 616, 'upstreamType': '个人'}, {'upORdown': '上游', '$_upORdown': 10, 'created': '2021-04-07 17:32:14', 'businessLicenseUrl': 'f8eae081aa35426d975406a03a4fd062', '$_upstreamType': 20, 'marketId': 8, 'operationLicenseUrl': '', 'license': '111', 'legalPerson': '哈哈哈', 'telphone': '13111111111', 'name': '企业上游111', 'modified': '2021-04-07 17:32:14', 'userNames': '该喝喝', 'id': 274, 'sourceUserId': 617, 'manufacturingLicenseUrl': '', 'upstreamType': '企业'}, {'upORdown': '上游', '$_upORdown': 10, 'created': '2021-01-21 11:49:27', 'businessLicenseUrl': '8478adbc99224b5f812b54b931e93e30', '$_upstreamType': 20, 'marketId': 8, 'operationLicenseUrl': '', 'license': '18989898989', 'legalPerson': '上游111', 'telphone': '18989898989', 'name': '上游111·', 'modified': '2021-01-21 17:30:59', 'userNames': '测试二号', 'id': 173, 'sourceUserId': 519, 'manufacturingLicenseUrl': '', 'upstreamType': '企业'}, {'upORdown': '上游', '$_upORdown': 10, 'created': '2021-01-14 14:53:44', 'businessLicenseUrl': '1993ceeb24504f43b16f06028ddd7ec7', '$_upstreamType': 20, 'marketId': 8, 'operationLicenseUrl': 'dd51ffc5f20944bc9c57d64b148f4b2f', 'license': '19925360686', 'legalPerson': '法人地脉000001111111', 'telphone': '19925360686', 'name': '上游企业0011111110000111', 'modified': '2021-01-14 14:53:44', 'userNames': 'null', 'id': 148, 'sourceUserId': 500, 'manufacturingLicenseUrl': '277ea39c03f94160a2cbe6d7dc3ec4f4', 'upstreamType': '企业'}, {'upORdown': '上游', '$_upORdown': 10, 'created': '2021-01-07 14:12:31', 'idCard': '513001199302081011', '$_upstreamType': 10, 'marketId': 8, 'cardNoBackUrl': '', 'telphone': '18380454588', 'cardNoFrontUrl': '', 'name': '111', 'modified': '2021-01-07 14:12:31', 'userNames': 'null', 'id': 102, 'sourceUserId': 438, 'upstreamType': '个人'}]}
997 929  
998 930  
999 931 </pre>
... ... @@ -1004,50 +936,24 @@ pt1.3.4: in test_4
1004 936 <td>无截图</td>
1005 937 </tr>
1006 938  
1007   -<tr id='pt1.3.5' class='hiddenRow'>
1008   - <td ><div class='testcase'>test_5_systemskip</div></td>
  939 +<tr id='pt1.6.2' class='hiddenRow'>
  940 + <td ><div class='testcase'>test_02_upStream2: 成功查询上下游企业,加入业户名称名称过滤条件</div></td>
1009 941 <td colspan='5' align='center'>
1010 942  
1011 943 <!--css div popup start-->
1012 944 <span class='status passCase'>
1013   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.3.5')" >
  945 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.6.2')" >
1014 946 通过</a></span>
1015 947  
1016   - <div id='div_pt1.3.5' class="popup_window">
  948 + <div id='div_pt1.6.2' class="popup_window">
1017 949 <div style='text-align: right; color:red;cursor:pointer'>
1018   - <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.3.5').style.display = 'none' " >
  950 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.6.2').style.display = 'none' " >
1019 951 [x]</a>
1020 952 </div>
1021 953 <pre>
1022 954  
1023   -pt1.3.5: in test_5
1024   -
1025   -
1026   - </pre>
1027   - </div>
1028   - <!--css div popup end-->
1029   -
1030   - </td>
1031   - <td>无截图</td>
1032   -</tr>
  955 +pt1.6.2: {'total': 1, 'rows': [{'upORdown': '上游', '$_upORdown': 10, 'created': '2021-05-24 17:35:48', 'idCard': '513001199105081258', '$_upstreamType': 10, 'marketId': 8, 'cardNoBackUrl': '', 'telphone': '18380475463', 'cardNoFrontUrl': '', 'name': '杨我', 'modified': '2021-05-24 17:35:48', 'userNames': '地利人和', 'id': 339, 'sourceUserId': 131138, 'upstreamType': '个人'}]}
1033 956  
1034   -<tr id='st1.3.6' class='none'>
1035   - <td ><div class='testcase'>test_6_systemskip</div></td>
1036   - <td colspan='5' align='center'>
1037   -
1038   - <!--css div popup start-->
1039   - <span class='status passCase'>
1040   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_st1.3.6')" >
1041   - 跳过</a></span>
1042   -
1043   - <div id='div_st1.3.6' class="popup_window">
1044   - <div style='text-align: right; color:red;cursor:pointer'>
1045   - <a onfocus='this.blur();' onclick="document.getElementById('div_st1.3.6').style.display = 'none' " >
1046   - [x]</a>
1047   - </div>
1048   - <pre>
1049   -
1050   -st1.3.6: TEST skipUnless True
1051 957  
1052 958 </pre>
1053 959 </div>
... ... @@ -1059,8 +965,8 @@ st1.3.6: TEST skipUnless True
1059 965  
1060 966 <tr id='total_row'>
1061 967 <th>统计</th>
1062   - <th>9</th>
1063   - <th>6</th>
  968 + <th>17</th>
  969 + <th>14</th>
1064 970 <th>3</th>
1065 971 <th>0</th>
1066 972 <th>&nbsp;</th>
... ... @@ -1069,7 +975,7 @@ st1.3.6: TEST skipUnless True
1069 975 </table>
1070 976 <script>
1071 977 showCase(0,1);
1072   - drawCircle('circle1',6, 3, 0);
  978 + drawCircle('circle1',14, 3, 0);
1073 979 </script>
1074 980  
1075 981 <div id='ending'>&nbsp;</div>
... ...
src/report/2021-06-17 17_19_13_result.html renamed to src/report/2021-06-22 16_00_46_result.html
... ... @@ -420,9 +420,9 @@ function hide_img(obj){
420 420 </script>
421 421 <div class='heading'>
422 422 <h1>揣瘚</h1>
423   -<p class='attribute'><strong>撘憪:</strong> 2021-06-17 17:19:13</p>
424   -<p class='attribute'><strong>:</strong> 0:00:12.656541</p>
425   -<p class='attribute'><strong>:</strong> <span class="tj passCase">Pass</span>:9 <span class="tj failCase">Failure</span>:6 <span class="tj"></span>:60.0%</p>
  423 +<p class='attribute'><strong>撘憪:</strong> 2021-06-22 16:00:46</p>
  424 +<p class='attribute'><strong>:</strong> 0:00:14.486108</p>
  425 +<p class='attribute'><strong>:</strong> <span class="tj passCase">Pass</span>:14 <span class="tj failCase">Failure</span>:3 <span class="tj skipCase">Skip</span>:1 <span class="tj"></span>:82.4%</p>
426 426  
427 427 <p class='description'>靘銵嚗</p>
428 428 </div>
... ... @@ -435,12 +435,12 @@ function hide_img(obj){
435 435 </div>
436 436  
437 437 <div id='show_detail_line' style=" float: left; width: 100%;">
438   -<a class="abstract detail_button" href='javascript:showCase(0,1)'>璁60.00%]</a>
439   -<a class="passed detail_button" href='javascript:showCase(1,1)'>9]</a>
440   -<a class="failed detail_button" href='javascript:showCase(2,1)'>憭梯揖[6]</a>
  438 +<a class="abstract detail_button" href='javascript:showCase(0,1)'>璁82.35%]</a>
  439 +<a class="passed detail_button" href='javascript:showCase(1,1)'>14]</a>
  440 +<a class="failed detail_button" href='javascript:showCase(2,1)'>憭梯揖[3]</a>
441 441 <a class="errored detail_button" href='javascript:showCase(3,1)'>秤[0]</a>
442   -<a class="skiped detail_button" href='javascript:showCase(4,1)'>頝唾0]</a>
443   -<a class="all detail_button" href='javascript:showCase(5,1)'>15]</a>
  442 +<a class="skiped detail_button" href='javascript:showCase(4,1)'>頝唾1]</a>
  443 +<a class="all detail_button" href='javascript:showCase(5,1)'>17]</a>
444 444 </div>
445 445  
446 446 <table id='result_table'>
... ... @@ -464,7 +464,7 @@ function hide_img(obj){
464 464 </tr>
465 465  
466 466 <tr class='passClass'>
467   - <td>doAdd.test_doAdd.test_doAdd</td>
  467 + <td>doAdd.test_doAdd.test_doAdd: 憓霈唳</td>
468 468 <td>3</td>
469 469 <td>3</td>
470 470 <td>0</td>
... ... @@ -474,7 +474,7 @@ function hide_img(obj){
474 474 </tr>
475 475  
476 476 <tr id='pt1.1.1' class='hiddenRow'>
477   - <td ><div class='testcase'>test_01_doAdd</div></td>
  477 + <td ><div class='testcase'>test_01_doAdd: 憓銝芸蛹憭抒憭蛹111</div></td>
478 478 <td colspan='5' align='center'>
479 479  
480 480 <!--css div popup start-->
... ... @@ -501,7 +501,7 @@ pt1.1.1: {&#39;code&#39;: &#39;200&#39;, &#39;message&#39;: &#39;OK&#39;, &#39;result&#39;: &#39;OK&#39;, &#39;success&#39;: True}
501 501 </tr>
502 502  
503 503 <tr id='pt1.1.2' class='hiddenRow'>
504   - <td ><div class='testcase'>test_02_doAdd</div></td>
  504 + <td ><div class='testcase'>test_02_doAdd: 憓銝芸蛹斢憭蛹111</div></td>
505 505 <td colspan='5' align='center'>
506 506  
507 507 <!--css div popup start-->
... ... @@ -528,7 +528,7 @@ pt1.1.2: {&#39;code&#39;: &#39;200&#39;, &#39;message&#39;: &#39;OK&#39;, &#39;result&#39;: &#39;OK&#39;, &#39;success&#39;: True}
528 528 </tr>
529 529  
530 530 <tr id='pt1.1.3' class='hiddenRow'>
531   - <td ><div class='testcase'>test_03_doAdd</div></td>
  531 + <td ><div class='testcase'>test_03_doAdd: 秤憓憓</div></td>
532 532 <td colspan='5' align='center'>
533 533  
534 534 <!--css div popup start-->
... ... @@ -555,80 +555,152 @@ pt1.1.3: {&#39;code&#39;: &#39;5000&#39;, &#39;message&#39;: &#39;霂W恥靽⊥憭梯揖&#39;, &#39;result&#39;: &#39;
555 555 </tr>
556 556  
557 557 <tr class='passClass'>
558   - <td>fieldConfig.test_fieldConfig.test_fieldConfig</td>
559   - <td>1</td>
560   - <td>1</td>
  558 + <td>doAudit.test_doAudit.test_doAudit: #霈啣恣</td>
  559 + <td>4</td>
  560 + <td>4</td>
561 561 <td>0</td>
562 562 <td>0</td>
563   - <td><a href="javascript:showClassDetail('c1.2',1)">霂行</a></td>
  563 + <td><a href="javascript:showClassDetail('c1.2',4)">霂行</a></td>
564 564 <td>&nbsp;</td>
565 565 </tr>
566 566  
567 567 <tr id='pt1.2.1' class='hiddenRow'>
568   - <td><div class='testcase'>test_01_fieldConfig</div></td>
569   - <td colspan='5' align='center'><span class='status passCase'></span></td>
  568 + <td ><div class='testcase'>test_01_doAudit: 摰⊥</div></td>
  569 + <td colspan='5' align='center'>
  570 +
  571 + <!--css div popup start-->
  572 + <span class='status passCase'>
  573 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.2.1')" >
  574 + </a></span>
  575 +
  576 + <div id='div_pt1.2.1' class="popup_window">
  577 + <div style='text-align: right; color:red;cursor:pointer'>
  578 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.2.1').style.display = 'none' " >
  579 + [x]</a>
  580 + </div>
  581 + <pre>
  582 +
  583 +pt1.2.1: {'code': '200', 'message': '', 'result': '', 'success': True}
  584 +
  585 +
  586 + </pre>
  587 + </div>
  588 + <!--css div popup end-->
  589 +
  590 + </td>
570 591 <td></td>
571 592 </tr>
572 593  
573   -<tr class='passClass'>
574   - <td>login.test_login.test_login</td>
575   - <td>3</td>
576   - <td>3</td>
577   - <td>0</td>
578   - <td>0</td>
579   - <td><a href="javascript:showClassDetail('c1.3',3)">霂行</a></td>
580   - <td>&nbsp;</td>
581   -</tr>
  594 +<tr id='pt1.2.2' class='hiddenRow'>
  595 + <td ><div class='testcase'>test_02_doAudit: 摰⊥銝</div></td>
  596 + <td colspan='5' align='center'>
582 597  
583   -<tr id='pt1.3.1' class='hiddenRow'>
584   - <td><div class='testcase'>test_01_login</div></td>
585   - <td colspan='5' align='center'><span class='status passCase'></span></td>
  598 + <!--css div popup start-->
  599 + <span class='status passCase'>
  600 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.2.2')" >
  601 + </a></span>
  602 +
  603 + <div id='div_pt1.2.2' class="popup_window">
  604 + <div style='text-align: right; color:red;cursor:pointer'>
  605 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.2.2').style.display = 'none' " >
  606 + [x]</a>
  607 + </div>
  608 + <pre>
  609 +
  610 +pt1.2.2: {'code': '200', 'message': '', 'result': '', 'success': True}
  611 +
  612 +
  613 + </pre>
  614 + </div>
  615 + <!--css div popup end-->
  616 +
  617 + </td>
586 618 <td></td>
587 619 </tr>
588 620  
589   -<tr id='pt1.3.2' class='hiddenRow'>
590   - <td><div class='testcase'>test_02_login</div></td>
591   - <td colspan='5' align='center'><span class='status passCase'></span></td>
  621 +<tr id='pt1.2.3' class='hiddenRow'>
  622 + <td ><div class='testcase'>test_03_doAudit: 摰⊥銝</div></td>
  623 + <td colspan='5' align='center'>
  624 +
  625 + <!--css div popup start-->
  626 + <span class='status passCase'>
  627 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.2.3')" >
  628 + </a></span>
  629 +
  630 + <div id='div_pt1.2.3' class="popup_window">
  631 + <div style='text-align: right; color:red;cursor:pointer'>
  632 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.2.3').style.display = 'none' " >
  633 + [x]</a>
  634 + </div>
  635 + <pre>
  636 +
  637 +pt1.2.3: {'code': '200', 'message': '', 'result': '', 'success': True}
  638 +
  639 +
  640 + </pre>
  641 + </div>
  642 + <!--css div popup end-->
  643 +
  644 + </td>
592 645 <td></td>
593 646 </tr>
594 647  
595   -<tr id='pt1.3.3' class='hiddenRow'>
596   - <td><div class='testcase'>test_03_login</div></td>
597   - <td colspan='5' align='center'><span class='status passCase'></span></td>
  648 +<tr id='pt1.2.4' class='hiddenRow'>
  649 + <td ><div class='testcase'>test_04_doAudit: 摰⊥銝銝芸歇蝏恣霈啣</div></td>
  650 + <td colspan='5' align='center'>
  651 +
  652 + <!--css div popup start-->
  653 + <span class='status passCase'>
  654 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.2.4')" >
  655 + </a></span>
  656 +
  657 + <div id='div_pt1.2.4' class="popup_window">
  658 + <div style='text-align: right; color:red;cursor:pointer'>
  659 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.2.4').style.display = 'none' " >
  660 + [x]</a>
  661 + </div>
  662 + <pre>
  663 +
  664 +pt1.2.4: {'code': '5000', 'message': '仃韐伐歇', 'result': '仃韐伐歇', 'success': False}
  665 +
  666 +
  667 + </pre>
  668 + </div>
  669 + <!--css div popup end-->
  670 +
  671 + </td>
598 672 <td></td>
599 673 </tr>
600 674  
601 675 <tr class='failClass'>
602   - <td>upStream.test_upStream.test_upStream1</td>
603   - <td>6</td>
604   - <td>0</td>
605   - <td>6</td>
  676 + <td>fieldConfig.test_fieldConfig.test_fieldConfig: Unittest靘恕霂</td>
  677 + <td>3</td>
  678 + <td>2</td>
  679 + <td>1</td>
606 680 <td>0</td>
607   - <td><a href="javascript:showClassDetail('c1.4',6)">霂行</a></td>
  681 + <td><a href="javascript:showClassDetail('c1.3',3)">霂行</a></td>
608 682 <td>&nbsp;</td>
609 683 </tr>
610 684  
611   -<tr id='ft1.4.1' class='none'>
612   - <td ><div class='testcase'>test_01_upStream1</div></td>
  685 +<tr id='pt1.3.1' class='hiddenRow'>
  686 + <td ><div class='testcase'>test_01_fieldConfig</div></td>
613 687 <td colspan='5' align='center'>
614 688  
615 689 <!--css div popup start-->
616   - <span class='status failCase'>
617   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.4.1')" >
618   - 憭梯揖</a></span>
  690 + <span class='status passCase'>
  691 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.3.1')" >
  692 + </a></span>
619 693  
620   - <div id='div_ft1.4.1' class="popup_window">
  694 + <div id='div_pt1.3.1' class="popup_window">
621 695 <div style='text-align: right; color:red;cursor:pointer'>
622   - <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.4.1').style.display = 'none' " >
  696 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.3.1').style.display = 'none' " >
623 697 [x]</a>
624 698 </div>
625 699 <pre>
626 700  
627   -ft1.4.1: {'code': '401', 'message': '敶', 'result': '敶', 'success': False}
628   -Traceback (most recent call last):
629   - File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\upStream\test_upStream.py", line 28, in test_01_upStream1
630   - self.assertTrue("total" in re.json().keys())
631   -AssertionError: False is not true
  701 +pt1.3.1: setUp
  702 +test_01_fieldConfig
  703 +tearDown
632 704  
633 705  
634 706 </pre>
... ... @@ -639,27 +711,25 @@ AssertionError: False is not true
639 711 <td></td>
640 712 </tr>
641 713  
642   -<tr id='ft1.4.2' class='none'>
643   - <td ><div class='testcase'>test_01_upStream1: _retry:1</div></td>
  714 +<tr id='pt1.3.2' class='hiddenRow'>
  715 + <td ><div class='testcase'>test_02_fieldConfig</div></td>
644 716 <td colspan='5' align='center'>
645 717  
646 718 <!--css div popup start-->
647   - <span class='status failCase'>
648   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.4.2')" >
649   - 憭梯揖</a></span>
  719 + <span class='status passCase'>
  720 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.3.2')" >
  721 + </a></span>
650 722  
651   - <div id='div_ft1.4.2' class="popup_window">
  723 + <div id='div_pt1.3.2' class="popup_window">
652 724 <div style='text-align: right; color:red;cursor:pointer'>
653   - <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.4.2').style.display = 'none' " >
  725 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.3.2').style.display = 'none' " >
654 726 [x]</a>
655 727 </div>
656 728 <pre>
657 729  
658   -ft1.4.2: {'code': '401', 'message': '敶', 'result': '敶', 'success': False}
659   -Traceback (most recent call last):
660   - File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\upStream\test_upStream.py", line 28, in test_01_upStream1
661   - self.assertTrue("total" in re.json().keys())
662   -AssertionError: False is not true
  730 +pt1.3.2: setUp
  731 +test_02_fieldConfig
  732 +tearDown
663 733  
664 734  
665 735 </pre>
... ... @@ -670,27 +740,29 @@ AssertionError: False is not true
670 740 <td></td>
671 741 </tr>
672 742  
673   -<tr id='ft1.4.3' class='none'>
674   - <td ><div class='testcase'>test_01_upStream1: _retry:2</div></td>
  743 +<tr id='ft1.3.3' class='none'>
  744 + <td ><div class='testcase'>test_03_fieldConfig: _retry:2</div></td>
675 745 <td colspan='5' align='center'>
676 746  
677 747 <!--css div popup start-->
678 748 <span class='status failCase'>
679   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.4.3')" >
  749 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.3.3')" >
680 750 憭梯揖</a></span>
681 751  
682   - <div id='div_ft1.4.3' class="popup_window">
  752 + <div id='div_ft1.3.3' class="popup_window">
683 753 <div style='text-align: right; color:red;cursor:pointer'>
684   - <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.4.3').style.display = 'none' " >
  754 + <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.3.3').style.display = 'none' " >
685 755 [x]</a>
686 756 </div>
687 757 <pre>
688 758  
689   -ft1.4.3: {'code': '401', 'message': '敶', 'result': '敶', 'success': False}
  759 +ft1.3.3: setUp
  760 +test_03_fieldConfig
  761 +tearDown
690 762 Traceback (most recent call last):
691   - File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\upStream\test_upStream.py", line 28, in test_01_upStream1
692   - self.assertTrue("total" in re.json().keys())
693   -AssertionError: False is not true
  763 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\fieldConfig\test_fieldConfig.py", line 26, in test_03_fieldConfig
  764 + self.assertEqual(100, 200, "瘚蝙")
  765 +AssertionError: 100 != 200 : 瘚蝙
694 766  
695 767  
696 768 </pre>
... ... @@ -701,28 +773,23 @@ AssertionError: False is not true
701 773 <td></td>
702 774 </tr>
703 775  
704   -<tr id='ft1.4.4' class='none'>
705   - <td ><div class='testcase'>test_02_upStream1</div></td>
  776 +<tr id='st1.3.4' class='none'>
  777 + <td ><div class='testcase'>test_04_fieldConfig</div></td>
706 778 <td colspan='5' align='center'>
707 779  
708 780 <!--css div popup start-->
709   - <span class='status failCase'>
710   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.4.4')" >
711   - 憭梯揖</a></span>
  781 + <span class='status passCase'>
  782 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_st1.3.4')" >
  783 + 頝唾</a></span>
712 784  
713   - <div id='div_ft1.4.4' class="popup_window">
  785 + <div id='div_st1.3.4' class="popup_window">
714 786 <div style='text-align: right; color:red;cursor:pointer'>
715   - <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.4.4').style.display = 'none' " >
  787 + <a onfocus='this.blur();' onclick="document.getElementById('div_st1.3.4').style.display = 'none' " >
716 788 [x]</a>
717 789 </div>
718 790 <pre>
719 791  
720   -ft1.4.4: {'code': '401', 'message': '敶', 'result': '敶', 'success': False}
721   -Traceback (most recent call last):
722   - File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\upStream\test_upStream.py", line 38, in test_02_upStream1
723   - self.assertTrue("legalPerson':''" in str(re.json()).replace(" ",""))
724   -AssertionError: False is not true
725   -
  792 +st1.3.4: 銵撘箏頝唾砲靘
726 793  
727 794 </pre>
728 795 </div>
... ... @@ -732,26 +799,64 @@ AssertionError: False is not true
732 799 <td></td>
733 800 </tr>
734 801  
735   -<tr id='ft1.4.5' class='none'>
736   - <td ><div class='testcase'>test_02_upStream1: _retry:1</div></td>
  802 +<tr class='passClass'>
  803 + <td>login.test_login.test_login: 敶</td>
  804 + <td>3</td>
  805 + <td>3</td>
  806 + <td>0</td>
  807 + <td>0</td>
  808 + <td><a href="javascript:showClassDetail('c1.4',3)">霂行</a></td>
  809 + <td>&nbsp;</td>
  810 +</tr>
  811 +
  812 +<tr id='pt1.4.1' class='hiddenRow'>
  813 + <td><div class='testcase'>test_01_login: 韐行撖甇&</div></td>
  814 + <td colspan='5' align='center'><span class='status passCase'></span></td>
  815 + <td></td>
  816 +</tr>
  817 +
  818 +<tr id='pt1.4.2' class='hiddenRow'>
  819 + <td><div class='testcase'>test_02_login: 撖秤</div></td>
  820 + <td colspan='5' align='center'><span class='status passCase'></span></td>
  821 + <td></td>
  822 +</tr>
  823 +
  824 +<tr id='pt1.4.3' class='hiddenRow'>
  825 + <td><div class='testcase'>test_03_login: 韐行秤</div></td>
  826 + <td colspan='5' align='center'><span class='status passCase'></span></td>
  827 + <td></td>
  828 +</tr>
  829 +
  830 +<tr class='failClass'>
  831 + <td>upStream.test_upStream.test_upStream1: 銝虜隡”霂X</td>
  832 + <td>2</td>
  833 + <td>0</td>
  834 + <td>2</td>
  835 + <td>0</td>
  836 + <td><a href="javascript:showClassDetail('c1.5',2)">霂行</a></td>
  837 + <td>&nbsp;</td>
  838 +</tr>
  839 +
  840 +<tr id='ft1.5.1' class='none'>
  841 + <td ><div class='testcase'>test_01_upStream1: 霂V虜隡,誘隞跛retry:2</div></td>
737 842 <td colspan='5' align='center'>
738 843  
739 844 <!--css div popup start-->
740 845 <span class='status failCase'>
741   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.4.5')" >
  846 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.5.1')" >
742 847 憭梯揖</a></span>
743 848  
744   - <div id='div_ft1.4.5' class="popup_window">
  849 + <div id='div_ft1.5.1' class="popup_window">
745 850 <div style='text-align: right; color:red;cursor:pointer'>
746   - <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.4.5').style.display = 'none' " >
  851 + <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.5.1').style.display = 'none' " >
747 852 [x]</a>
748 853 </div>
749 854 <pre>
750 855  
751   -ft1.4.5: {'code': '401', 'message': '敶', 'result': '敶', 'success': False}
  856 +ft1.5.1: {'code': '401', 'message': '敶', 'result': '敶', 'success': False}
752 857 Traceback (most recent call last):
753   - File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\upStream\test_upStream.py", line 38, in test_02_upStream1
754   - self.assertTrue("legalPerson':''" in str(re.json()).replace(" ",""))
  858 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\upStream\test_upStream.py", line 27, in test_01_upStream1
  859 + self.assertTrue("total" in re.json().keys())
755 860 AssertionError: False is not true
756 861  
757 862  
... ... @@ -763,25 +868,25 @@ AssertionError: False is not true
763 868 <td></td>
764 869 </tr>
765 870  
766   -<tr id='ft1.4.6' class='none'>
767   - <td ><div class='testcase'>test_02_upStream1: _retry:2</div></td>
  871 +<tr id='ft1.5.2' class='none'>
  872 + <td ><div class='testcase'>test_02_upStream1: 霂V虜隡,隡/銝芯犖妍餈誘隞跛retry:2</div></td>
768 873 <td colspan='5' align='center'>
769 874  
770 875 <!--css div popup start-->
771 876 <span class='status failCase'>
772   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.4.6')" >
  877 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.5.2')" >
773 878 憭梯揖</a></span>
774 879  
775   - <div id='div_ft1.4.6' class="popup_window">
  880 + <div id='div_ft1.5.2' class="popup_window">
776 881 <div style='text-align: right; color:red;cursor:pointer'>
777   - <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.4.6').style.display = 'none' " >
  882 + <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.5.2').style.display = 'none' " >
778 883 [x]</a>
779 884 </div>
780 885 <pre>
781 886  
782   -ft1.4.6: {'code': '401', 'message': '敶', 'result': '敶', 'success': False}
  887 +ft1.5.2: {'code': '401', 'message': '敶', 'result': '敶', 'success': False}
783 888 Traceback (most recent call last):
784   - File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\upStream\test_upStream.py", line 38, in test_02_upStream1
  889 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\upStream\test_upStream.py", line 40, in test_02_upStream1
785 890 self.assertTrue("legalPerson':''" in str(re.json()).replace(" ",""))
786 891 AssertionError: False is not true
787 892  
... ... @@ -795,32 +900,32 @@ AssertionError: False is not true
795 900 </tr>
796 901  
797 902 <tr class='passClass'>
798   - <td>upStream.test_upStream.test_upStream2</td>
  903 + <td>upStream.test_upStream.test_upStream2: 銝虜隡”霂X2</td>
799 904 <td>2</td>
800 905 <td>2</td>
801 906 <td>0</td>
802 907 <td>0</td>
803   - <td><a href="javascript:showClassDetail('c1.5',2)">霂行</a></td>
  908 + <td><a href="javascript:showClassDetail('c1.6',2)">霂行</a></td>
804 909 <td>&nbsp;</td>
805 910 </tr>
806 911  
807   -<tr id='pt1.5.1' class='hiddenRow'>
808   - <td ><div class='testcase'>test_01_upStream2</div></td>
  912 +<tr id='pt1.6.1' class='hiddenRow'>
  913 + <td ><div class='testcase'>test_01_upStream2: 霂V虜隡,隡/銝芯犖妍餈誘隞</div></td>
809 914 <td colspan='5' align='center'>
810 915  
811 916 <!--css div popup start-->
812 917 <span class='status passCase'>
813   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.5.1')" >
  918 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.6.1')" >
814 919 </a></span>
815 920  
816   - <div id='div_pt1.5.1' class="popup_window">
  921 + <div id='div_pt1.6.1' class="popup_window">
817 922 <div style='text-align: right; color:red;cursor:pointer'>
818   - <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.5.1').style.display = 'none' " >
  923 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.6.1').style.display = 'none' " >
819 924 [x]</a>
820 925 </div>
821 926 <pre>
822 927  
823   -pt1.5.1: {'total': 5, 'rows': [{'upORdown': '銝虜', '$_upORdown': 10, 'created': '2021-05-10 09:42:51', 'idCard': '', '$_upstreamType': 10, 'marketId': 8, 'cardNoBackUrl': '', 'telphone': '13540782311', 'cardNoFrontUrl': '', 'name': '111', 'modified': '2021-05-10 09:42:51', 'userNames': '憸之', 'id': 333, 'sourceUserId': 616, 'upstreamType': '銝芯犖'}, {'upORdown': '銝虜', '$_upORdown': 10, 'created': '2021-04-07 17:32:14', 'businessLicenseUrl': 'f8eae081aa35426d975406a03a4fd062', '$_upstreamType': 20, 'marketId': 8, 'operationLicenseUrl': '', 'license': '111', 'legalPerson': '', 'telphone': '13111111111', 'name': '隡虜111', 'modified': '2021-04-07 17:32:14', 'userNames': '霂亙', 'id': 274, 'sourceUserId': 617, 'manufacturingLicenseUrl': '', 'upstreamType': '隡'}, {'upORdown': '銝虜', '$_upORdown': 10, 'created': '2021-01-21 11:49:27', 'businessLicenseUrl': '8478adbc99224b5f812b54b931e93e30', '$_upstreamType': 20, 'marketId': 8, 'operationLicenseUrl': '', 'license': '18989898989', 'legalPerson': '銝虜111', 'telphone': '18989898989', 'name': '銝虜111繚', 'modified': '2021-01-21 17:30:59', 'userNames': '瘚', 'id': 173, 'sourceUserId': 519, 'manufacturingLicenseUrl': '', 'upstreamType': '隡'}, {'upORdown': '銝虜', '$_upORdown': 10, 'created': '2021-01-14 14:53:44', 'businessLicenseUrl': '1993ceeb24504f43b16f06028ddd7ec7', '$_upstreamType': 20, 'marketId': 8, 'operationLicenseUrl': 'dd51ffc5f20944bc9c57d64b148f4b2f', 'license': '19925360686', 'legalPerson': '瘜犖000001111111', 'telphone': '19925360686', 'name': '銝虜隡0011111110000111', 'modified': '2021-01-14 14:53:44', 'userNames': 'null', 'id': 148, 'sourceUserId': 500, 'manufacturingLicenseUrl': '277ea39c03f94160a2cbe6d7dc3ec4f4', 'upstreamType': '隡'}, {'upORdown': '銝虜', '$_upORdown': 10, 'created': '2021-01-07 14:12:31', 'idCard': '513001199302081011', '$_upstreamType': 10, 'marketId': 8, 'cardNoBackUrl': '', 'telphone': '18380454588', 'cardNoFrontUrl': '', 'name': '111', 'modified': '2021-01-07 14:12:31', 'userNames': 'null', 'id': 102, 'sourceUserId': 438, 'upstreamType': '銝芯犖'}]}
  928 +pt1.6.1: {'total': 5, 'rows': [{'upORdown': '銝虜', '$_upORdown': 10, 'created': '2021-05-10 09:42:51', 'idCard': '', '$_upstreamType': 10, 'marketId': 8, 'cardNoBackUrl': '', 'telphone': '13540782311', 'cardNoFrontUrl': '', 'name': '111', 'modified': '2021-05-10 09:42:51', 'userNames': '憸之', 'id': 333, 'sourceUserId': 616, 'upstreamType': '銝芯犖'}, {'upORdown': '銝虜', '$_upORdown': 10, 'created': '2021-04-07 17:32:14', 'businessLicenseUrl': 'f8eae081aa35426d975406a03a4fd062', '$_upstreamType': 20, 'marketId': 8, 'operationLicenseUrl': '', 'license': '111', 'legalPerson': '', 'telphone': '13111111111', 'name': '隡虜111', 'modified': '2021-04-07 17:32:14', 'userNames': '霂亙', 'id': 274, 'sourceUserId': 617, 'manufacturingLicenseUrl': '', 'upstreamType': '隡'}, {'upORdown': '銝虜', '$_upORdown': 10, 'created': '2021-01-21 11:49:27', 'businessLicenseUrl': '8478adbc99224b5f812b54b931e93e30', '$_upstreamType': 20, 'marketId': 8, 'operationLicenseUrl': '', 'license': '18989898989', 'legalPerson': '銝虜111', 'telphone': '18989898989', 'name': '銝虜111繚', 'modified': '2021-01-21 17:30:59', 'userNames': '瘚', 'id': 173, 'sourceUserId': 519, 'manufacturingLicenseUrl': '', 'upstreamType': '隡'}, {'upORdown': '銝虜', '$_upORdown': 10, 'created': '2021-01-14 14:53:44', 'businessLicenseUrl': '1993ceeb24504f43b16f06028ddd7ec7', '$_upstreamType': 20, 'marketId': 8, 'operationLicenseUrl': 'dd51ffc5f20944bc9c57d64b148f4b2f', 'license': '19925360686', 'legalPerson': '瘜犖000001111111', 'telphone': '19925360686', 'name': '銝虜隡0011111110000111', 'modified': '2021-01-14 14:53:44', 'userNames': 'null', 'id': 148, 'sourceUserId': 500, 'manufacturingLicenseUrl': '277ea39c03f94160a2cbe6d7dc3ec4f4', 'upstreamType': '隡'}, {'upORdown': '銝虜', '$_upORdown': 10, 'created': '2021-01-07 14:12:31', 'idCard': '513001199302081011', '$_upstreamType': 10, 'marketId': 8, 'cardNoBackUrl': '', 'telphone': '18380454588', 'cardNoFrontUrl': '', 'name': '111', 'modified': '2021-01-07 14:12:31', 'userNames': 'null', 'id': 102, 'sourceUserId': 438, 'upstreamType': '銝芯犖'}]}
824 929  
825 930  
826 931 </pre>
... ... @@ -831,23 +936,23 @@ pt1.5.1: {&#39;total&#39;: 5, &#39;rows&#39;: [{&#39;upORdown&#39;: &#39;銝虜&#39;, &#39;$_upORdown&#39;: 10, &#39;created
831 936 <td></td>
832 937 </tr>
833 938  
834   -<tr id='pt1.5.2' class='hiddenRow'>
835   - <td ><div class='testcase'>test_02_upStream2</div></td>
  939 +<tr id='pt1.6.2' class='hiddenRow'>
  940 + <td ><div class='testcase'>test_02_upStream2: 霂V虜隡,銝妍妍餈誘隞</div></td>
836 941 <td colspan='5' align='center'>
837 942  
838 943 <!--css div popup start-->
839 944 <span class='status passCase'>
840   - <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.5.2')" >
  945 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.6.2')" >
841 946 </a></span>
842 947  
843   - <div id='div_pt1.5.2' class="popup_window">
  948 + <div id='div_pt1.6.2' class="popup_window">
844 949 <div style='text-align: right; color:red;cursor:pointer'>
845   - <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.5.2').style.display = 'none' " >
  950 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.6.2').style.display = 'none' " >
846 951 [x]</a>
847 952 </div>
848 953 <pre>
849 954  
850   -pt1.5.2: {'total': 1, 'rows': [{'upORdown': '銝虜', '$_upORdown': 10, 'created': '2021-05-24 17:35:48', 'idCard': '513001199105081258', '$_upstreamType': 10, 'marketId': 8, 'cardNoBackUrl': '', 'telphone': '18380475463', 'cardNoFrontUrl': '', 'name': '', 'modified': '2021-05-24 17:35:48', 'userNames': '鈭箏', 'id': 339, 'sourceUserId': 131138, 'upstreamType': '銝芯犖'}]}
  955 +pt1.6.2: {'total': 1, 'rows': [{'upORdown': '銝虜', '$_upORdown': 10, 'created': '2021-05-24 17:35:48', 'idCard': '513001199105081258', '$_upstreamType': 10, 'marketId': 8, 'cardNoBackUrl': '', 'telphone': '18380475463', 'cardNoFrontUrl': '', 'name': '', 'modified': '2021-05-24 17:35:48', 'userNames': '鈭箏', 'id': 339, 'sourceUserId': 131138, 'upstreamType': '銝芯犖'}]}
851 956  
852 957  
853 958 </pre>
... ... @@ -860,9 +965,9 @@ pt1.5.2: {&#39;total&#39;: 1, &#39;rows&#39;: [{&#39;upORdown&#39;: &#39;銝虜&#39;, &#39;$_upORdown&#39;: 10, &#39;created
860 965  
861 966 <tr id='total_row'>
862 967 <th>蝏恣</th>
863   - <th>15</th>
864   - <th>9</th>
865   - <th>6</th>
  968 + <th>17</th>
  969 + <th>14</th>
  970 + <th>3</th>
866 971 <th>0</th>
867 972 <th>&nbsp;</th>
868 973 <th>&nbsp;</th>
... ... @@ -870,7 +975,7 @@ pt1.5.2: {&#39;total&#39;: 1, &#39;rows&#39;: [{&#39;upORdown&#39;: &#39;銝虜&#39;, &#39;$_upORdown&#39;: 10, &#39;created
870 975 </table>
871 976 <script>
872 977 showCase(0,1);
873   - drawCircle('circle1',9, 6, 0);
  978 + drawCircle('circle1',14, 3, 0);
874 979 </script>
875 980  
876 981 <div id='ending'>&nbsp;</div>
... ...
src/report/2021-06-18 10_29_59_result.html renamed to src/report/2021-06-22 16_03_03_result.html
... ... @@ -420,9 +420,9 @@ function hide_img(obj){
420 420 </script>
421 421 <div class='heading'>
422 422 <h1>搜索功能测试报告</h1>
423   -<p class='attribute'><strong>开始时间:</strong> 2021-06-18 10:29:59</p>
424   -<p class='attribute'><strong>耗时:</strong> 0:00:00</p>
425   -<p class='attribute'><strong>状态:</strong> <span class="tj">通过率</span>:0.0%</p>
  423 +<p class='attribute'><strong>开始时间:</strong> 2021-06-22 16:03:03</p>
  424 +<p class='attribute'><strong>耗时:</strong> 0:00:00.799786</p>
  425 +<p class='attribute'><strong>状态:</strong> <span class="tj passCase">Pass</span>:5 <span class="tj failCase">Failure</span>:1 <span class="tj errorCase">Error</span>:5 <span class="tj skipCase">Skip</span>:1 <span class="tj">通过率</span>:45.5%</p>
426 426  
427 427 <p class='description'>用例执行情况:</p>
428 428 </div>
... ... @@ -435,12 +435,12 @@ function hide_img(obj){
435 435 </div>
436 436  
437 437 <div id='show_detail_line' style=" float: left; width: 100%;">
438   -<a class="abstract detail_button" href='javascript:showCase(0,1)'>概要[0.00%]</a>
439   -<a class="passed detail_button" href='javascript:showCase(1,1)'>通过[0]</a>
440   -<a class="failed detail_button" href='javascript:showCase(2,1)'>失败[0]</a>
441   -<a class="errored detail_button" href='javascript:showCase(3,1)'>错误[0]</a>
442   -<a class="skiped detail_button" href='javascript:showCase(4,1)'>跳过[0]</a>
443   -<a class="all detail_button" href='javascript:showCase(5,1)'>所有[0]</a>
  438 +<a class="abstract detail_button" href='javascript:showCase(0,1)'>概要[45.45%]</a>
  439 +<a class="passed detail_button" href='javascript:showCase(1,1)'>通过[5]</a>
  440 +<a class="failed detail_button" href='javascript:showCase(2,1)'>失败[1]</a>
  441 +<a class="errored detail_button" href='javascript:showCase(3,1)'>错误[5]</a>
  442 +<a class="skiped detail_button" href='javascript:showCase(4,1)'>跳过[1]</a>
  443 +<a class="all detail_button" href='javascript:showCase(5,1)'>所有[11]</a>
444 444 </div>
445 445  
446 446 <table id='result_table'>
... ... @@ -463,19 +463,368 @@ function hide_img(obj){
463 463 <th>错误截图</th>
464 464 </tr>
465 465  
  466 +<tr class='errorClass'>
  467 + <td>unittest.suite._ErrorHolder</td>
  468 + <td>3</td>
  469 + <td>0</td>
  470 + <td>0</td>
  471 + <td>3</td>
  472 + <td><a href="javascript:showClassDetail('c1.1',3)">详情</a></td>
  473 + <td>&nbsp;</td>
  474 +</tr>
  475 +
  476 +<tr id='et1.1.1' class='none'>
  477 + <td ><div class='testcase'>test_doAdd)</div></td>
  478 + <td colspan='5' align='center'>
  479 +
  480 + <!--css div popup start-->
  481 + <span class='status errorCase'>
  482 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_et1.1.1')" >
  483 + 错误</a></span>
  484 +
  485 + <div id='div_et1.1.1' class="popup_window">
  486 + <div style='text-align: right; color:red;cursor:pointer'>
  487 + <a onfocus='this.blur();' onclick="document.getElementById('div_et1.1.1').style.display = 'none' " >
  488 + [x]</a>
  489 + </div>
  490 + <pre>
  491 +
  492 +et1.1.1: Traceback (most recent call last):
  493 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\doAdd\test_doAdd.py", line 20, in setUpClass
  494 + cls.se=ll.get_session("user01",allow_redirects=False)
  495 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\commons\api\login.py", line 50, in get_session
  496 + re=self.se.post(url=self.url, headers=self.header,data=self.body,keep_alive = False,**kwargs)
  497 + File "C:\Python367\lib\site-packages\requests\sessions.py", line 590, in post
  498 + return self.request('POST', url, data=data, json=json, **kwargs)
  499 +TypeError: request() got an unexpected keyword argument 'keep_alive'
  500 +
  501 +
  502 + </pre>
  503 + </div>
  504 + <!--css div popup end-->
  505 +
  506 + </td>
  507 + <td>无截图</td>
  508 +</tr>
  509 +
  510 +<tr id='et1.1.2' class='none'>
  511 + <td ><div class='testcase'>test_doAudit)</div></td>
  512 + <td colspan='5' align='center'>
  513 +
  514 + <!--css div popup start-->
  515 + <span class='status errorCase'>
  516 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_et1.1.2')" >
  517 + 错误</a></span>
  518 +
  519 + <div id='div_et1.1.2' class="popup_window">
  520 + <div style='text-align: right; color:red;cursor:pointer'>
  521 + <a onfocus='this.blur();' onclick="document.getElementById('div_et1.1.2').style.display = 'none' " >
  522 + [x]</a>
  523 + </div>
  524 + <pre>
  525 +
  526 +et1.1.2: Traceback (most recent call last):
  527 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\doAudit\test_doAudit.py", line 28, in setUpClass
  528 + cls.se=lo.get_session("user01",allow_redirects=False)
  529 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\commons\api\login.py", line 50, in get_session
  530 + re=self.se.post(url=self.url, headers=self.header,data=self.body,keep_alive = False,**kwargs)
  531 + File "C:\Python367\lib\site-packages\requests\sessions.py", line 590, in post
  532 + return self.request('POST', url, data=data, json=json, **kwargs)
  533 +TypeError: request() got an unexpected keyword argument 'keep_alive'
  534 +
  535 +
  536 + </pre>
  537 + </div>
  538 + <!--css div popup end-->
  539 +
  540 + </td>
  541 + <td>无截图</td>
  542 +</tr>
  543 +
  544 +<tr id='et1.1.3' class='none'>
  545 + <td ><div class='testcase'>test_upStream1)</div></td>
  546 + <td colspan='5' align='center'>
  547 +
  548 + <!--css div popup start-->
  549 + <span class='status errorCase'>
  550 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_et1.1.3')" >
  551 + 错误</a></span>
  552 +
  553 + <div id='div_et1.1.3' class="popup_window">
  554 + <div style='text-align: right; color:red;cursor:pointer'>
  555 + <a onfocus='this.blur();' onclick="document.getElementById('div_et1.1.3').style.display = 'none' " >
  556 + [x]</a>
  557 + </div>
  558 + <pre>
  559 +
  560 +et1.1.3: Traceback (most recent call last):
  561 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\upStream\test_upStream.py", line 18, in setUpClass
  562 + cls.se=ll.get_session("user01",proxies={'http': 'http://localhost:8888'},allow_redirects=False)
  563 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\commons\api\login.py", line 50, in get_session
  564 + re=self.se.post(url=self.url, headers=self.header,data=self.body,keep_alive = False,**kwargs)
  565 + File "C:\Python367\lib\site-packages\requests\sessions.py", line 590, in post
  566 + return self.request('POST', url, data=data, json=json, **kwargs)
  567 +TypeError: request() got an unexpected keyword argument 'keep_alive'
  568 +
  569 +
  570 + </pre>
  571 + </div>
  572 + <!--css div popup end-->
  573 +
  574 + </td>
  575 + <td>无截图</td>
  576 +</tr>
  577 +
  578 +<tr class='failClass'>
  579 + <td>fieldConfig.test_fieldConfig.test_fieldConfig: Unittest用例结构的简单的认识</td>
  580 + <td>3</td>
  581 + <td>2</td>
  582 + <td>1</td>
  583 + <td>0</td>
  584 + <td><a href="javascript:showClassDetail('c1.2',3)">详情</a></td>
  585 + <td>&nbsp;</td>
  586 +</tr>
  587 +
  588 +<tr id='pt1.2.1' class='hiddenRow'>
  589 + <td ><div class='testcase'>test_01_fieldConfig</div></td>
  590 + <td colspan='5' align='center'>
  591 +
  592 + <!--css div popup start-->
  593 + <span class='status passCase'>
  594 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.2.1')" >
  595 + 通过</a></span>
  596 +
  597 + <div id='div_pt1.2.1' class="popup_window">
  598 + <div style='text-align: right; color:red;cursor:pointer'>
  599 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.2.1').style.display = 'none' " >
  600 + [x]</a>
  601 + </div>
  602 + <pre>
  603 +
  604 +pt1.2.1: setUp
  605 +test_01_fieldConfig
  606 +tearDown
  607 +
  608 +
  609 + </pre>
  610 + </div>
  611 + <!--css div popup end-->
  612 +
  613 + </td>
  614 + <td>无截图</td>
  615 +</tr>
  616 +
  617 +<tr id='pt1.2.2' class='hiddenRow'>
  618 + <td ><div class='testcase'>test_02_fieldConfig</div></td>
  619 + <td colspan='5' align='center'>
  620 +
  621 + <!--css div popup start-->
  622 + <span class='status passCase'>
  623 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.2.2')" >
  624 + 通过</a></span>
  625 +
  626 + <div id='div_pt1.2.2' class="popup_window">
  627 + <div style='text-align: right; color:red;cursor:pointer'>
  628 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.2.2').style.display = 'none' " >
  629 + [x]</a>
  630 + </div>
  631 + <pre>
  632 +
  633 +pt1.2.2: setUp
  634 +test_02_fieldConfig
  635 +tearDown
  636 +
  637 +
  638 + </pre>
  639 + </div>
  640 + <!--css div popup end-->
  641 +
  642 + </td>
  643 + <td>无截图</td>
  644 +</tr>
  645 +
  646 +<tr id='ft1.2.3' class='none'>
  647 + <td ><div class='testcase'>test_03_fieldConfig: _retry:2</div></td>
  648 + <td colspan='5' align='center'>
  649 +
  650 + <!--css div popup start-->
  651 + <span class='status failCase'>
  652 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.2.3')" >
  653 + 失败</a></span>
  654 +
  655 + <div id='div_ft1.2.3' class="popup_window">
  656 + <div style='text-align: right; color:red;cursor:pointer'>
  657 + <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.2.3').style.display = 'none' " >
  658 + [x]</a>
  659 + </div>
  660 + <pre>
  661 +
  662 +ft1.2.3: setUp
  663 +test_03_fieldConfig
  664 +tearDown
  665 +Traceback (most recent call last):
  666 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\fieldConfig\test_fieldConfig.py", line 26, in test_03_fieldConfig
  667 + self.assertEqual(100, 200, "测试使用")
  668 +AssertionError: 100 != 200 : 测试使用
  669 +
  670 +
  671 + </pre>
  672 + </div>
  673 + <!--css div popup end-->
  674 +
  675 + </td>
  676 + <td>无截图</td>
  677 +</tr>
  678 +
  679 +<tr id='st1.2.4' class='none'>
  680 + <td ><div class='testcase'>test_04_fieldConfig</div></td>
  681 + <td colspan='5' align='center'>
  682 +
  683 + <!--css div popup start-->
  684 + <span class='status passCase'>
  685 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_st1.2.4')" >
  686 + 跳过</a></span>
  687 +
  688 + <div id='div_st1.2.4' class="popup_window">
  689 + <div style='text-align: right; color:red;cursor:pointer'>
  690 + <a onfocus='this.blur();' onclick="document.getElementById('div_st1.2.4').style.display = 'none' " >
  691 + [x]</a>
  692 + </div>
  693 + <pre>
  694 +
  695 +st1.2.4: 执行时强制跳过该用例
  696 +
  697 + </pre>
  698 + </div>
  699 + <!--css div popup end-->
  700 +
  701 + </td>
  702 + <td>无截图</td>
  703 +</tr>
  704 +
  705 +<tr class='passClass'>
  706 + <td>login.test_login.test_login: 登录接口</td>
  707 + <td>3</td>
  708 + <td>3</td>
  709 + <td>0</td>
  710 + <td>0</td>
  711 + <td><a href="javascript:showClassDetail('c1.3',3)">详情</a></td>
  712 + <td>&nbsp;</td>
  713 +</tr>
  714 +
  715 +<tr id='pt1.3.1' class='hiddenRow'>
  716 + <td><div class='testcase'>test_01_login: 账户密码都正确</div></td>
  717 + <td colspan='5' align='center'><span class='status passCase'>通过</span></td>
  718 + <td>无截图</td>
  719 +</tr>
  720 +
  721 +<tr id='pt1.3.2' class='hiddenRow'>
  722 + <td><div class='testcase'>test_02_login: 密码错误</div></td>
  723 + <td colspan='5' align='center'><span class='status passCase'>通过</span></td>
  724 + <td>无截图</td>
  725 +</tr>
  726 +
  727 +<tr id='pt1.3.3' class='hiddenRow'>
  728 + <td><div class='testcase'>test_03_login: 账户错误</div></td>
  729 + <td colspan='5' align='center'><span class='status passCase'>通过</span></td>
  730 + <td>无截图</td>
  731 +</tr>
  732 +
  733 +<tr class='errorClass'>
  734 + <td>upStream.test_upStream.test_upStream2: 上游企业列表查询接口2</td>
  735 + <td>2</td>
  736 + <td>0</td>
  737 + <td>0</td>
  738 + <td>2</td>
  739 + <td><a href="javascript:showClassDetail('c1.4',2)">详情</a></td>
  740 + <td>&nbsp;</td>
  741 +</tr>
  742 +
  743 +<tr id='et1.4.1' class='none'>
  744 + <td ><div class='testcase'>test_01_upStream2: 成功查询上下游企业,加入企业/个人名称过滤条件_retry:2</div></td>
  745 + <td colspan='5' align='center'>
  746 +
  747 + <!--css div popup start-->
  748 + <span class='status errorCase'>
  749 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_et1.4.1')" >
  750 + 错误</a></span>
  751 +
  752 + <div id='div_et1.4.1' class="popup_window">
  753 + <div style='text-align: right; color:red;cursor:pointer'>
  754 + <a onfocus='this.blur();' onclick="document.getElementById('div_et1.4.1').style.display = 'none' " >
  755 + [x]</a>
  756 + </div>
  757 + <pre>
  758 +
  759 +et1.4.1: Traceback (most recent call last):
  760 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\upStream\test_upStream.py", line 55, in test_01_upStream2
  761 + re=uu.post("user01",url=uu.url,headers=uu.header,json=body)
  762 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\commons\api\upStream.py", line 36, in post
  763 + se=ll.get_session(account)
  764 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\commons\api\login.py", line 50, in get_session
  765 + re=self.se.post(url=self.url, headers=self.header,data=self.body,keep_alive = False,**kwargs)
  766 + File "C:\Python367\lib\site-packages\requests\sessions.py", line 590, in post
  767 + return self.request('POST', url, data=data, json=json, **kwargs)
  768 +TypeError: request() got an unexpected keyword argument 'keep_alive'
  769 +
  770 +
  771 + </pre>
  772 + </div>
  773 + <!--css div popup end-->
  774 +
  775 + </td>
  776 + <td>无截图</td>
  777 +</tr>
  778 +
  779 +<tr id='et1.4.2' class='none'>
  780 + <td ><div class='testcase'>test_02_upStream2: 成功查询上下游企业,加入业户名称名称过滤条件_retry:2</div></td>
  781 + <td colspan='5' align='center'>
  782 +
  783 + <!--css div popup start-->
  784 + <span class='status errorCase'>
  785 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_et1.4.2')" >
  786 + 错误</a></span>
  787 +
  788 + <div id='div_et1.4.2' class="popup_window">
  789 + <div style='text-align: right; color:red;cursor:pointer'>
  790 + <a onfocus='this.blur();' onclick="document.getElementById('div_et1.4.2').style.display = 'none' " >
  791 + [x]</a>
  792 + </div>
  793 + <pre>
  794 +
  795 +et1.4.2: Traceback (most recent call last):
  796 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\upStream\test_upStream.py", line 66, in test_02_upStream2
  797 + re=uu.post("user01",url=uu.url,headers=uu.header,json=body)
  798 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\commons\api\upStream.py", line 36, in post
  799 + se=ll.get_session(account)
  800 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\commons\api\login.py", line 50, in get_session
  801 + re=self.se.post(url=self.url, headers=self.header,data=self.body,keep_alive = False,**kwargs)
  802 + File "C:\Python367\lib\site-packages\requests\sessions.py", line 590, in post
  803 + return self.request('POST', url, data=data, json=json, **kwargs)
  804 +TypeError: request() got an unexpected keyword argument 'keep_alive'
  805 +
  806 +
  807 + </pre>
  808 + </div>
  809 + <!--css div popup end-->
  810 +
  811 + </td>
  812 + <td>无截图</td>
  813 +</tr>
  814 +
466 815 <tr id='total_row'>
467 816 <th>统计</th>
468   - <th>0</th>
469   - <th>0</th>
470   - <th>0</th>
471   - <th>0</th>
  817 + <th>11</th>
  818 + <th>5</th>
  819 + <th>1</th>
  820 + <th>5</th>
472 821 <th>&nbsp;</th>
473 822 <th>&nbsp;</th>
474 823 </tr>
475 824 </table>
476 825 <script>
477 826 showCase(0,1);
478   - drawCircle('circle1',0, 0, 0);
  827 + drawCircle('circle1',5, 1, 5);
479 828 </script>
480 829  
481 830 <div id='ending'>&nbsp;</div>
... ...
src/report/2021-06-22 16_10_41_result.html 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3 +<html xmlns="http://www.w3.org/1999/xhtml">
  4 +<head>
  5 + <title>搜索功能测试报告</title>
  6 + <meta name="generator" content="HTMLTestRunner 0.8.3"/>
  7 + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  8 +
  9 +<style type="text/css" media="screen">
  10 +body { font-family: verdana, arial, helvetica, sans-serif; font-size: 80%; }
  11 +table { font-size: 100%; }
  12 +pre {
  13 + white-space: pre-wrap;
  14 + word-wrap: break-word;
  15 +}
  16 +
  17 +/* -- heading ---------------------------------------------------------------------- */
  18 +h1 {
  19 + font-size: 16pt;
  20 + color: gray;
  21 +}
  22 +.heading {
  23 + float:left;
  24 + width:30%;
  25 + margin-top: 0ex;
  26 + margin-bottom: 1ex;
  27 +}
  28 +
  29 +.heading .attribute {
  30 + margin-top: 1ex;
  31 + margin-bottom: 0;
  32 +}
  33 +
  34 +.heading .description {
  35 + margin-top: 4ex;
  36 + margin-bottom: 6ex;
  37 +}
  38 +
  39 +/* -- css div popup ------------------------------------------------------------------------ */
  40 +a.popup_link {
  41 +}
  42 +
  43 +a.popup_link:hover {
  44 + color: red;
  45 +}
  46 +.img{
  47 + height: 100%;
  48 + border-collapse: collapse;
  49 + border: 2px solid #777;
  50 +}
  51 +
  52 +.screenshots {
  53 + z-index: 100;
  54 + position:fixed;
  55 + height: 80%;
  56 + left: 50%;
  57 + top: 50%;
  58 + transform: translate(-50%,-50%);
  59 + display: none;
  60 +}
  61 +
  62 +.imgyuan{
  63 + height: 20px;
  64 + border-radius: 12px;
  65 + background-color: red;
  66 + padding-left: 13px;
  67 + margin: 0 auto;
  68 + position: relative;
  69 + top: -40px;
  70 + background-color: rgba(1, 150, 0, 0.3);
  71 +}
  72 +.imgyuan font{
  73 + border:1px solid white;
  74 + width:11px;
  75 + height:11px;
  76 + border-radius:50%;
  77 + margin-right: 9px;
  78 + margin-top: 4px;
  79 + display: block;
  80 + float: left;
  81 + background-color: white;
  82 +}
  83 +.close_shots {
  84 + background-image: url(data:image/png;base64,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/GMzLdsAAD+3aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzA2NyA3OS4xNTc3NDcsIDIwMTUvMDMvMzAtMjM6NDA6NDIgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjk4NDVkYzlhLTM2NTEtMTFlOC1hMDRjLWMzZmRjNzFmNjFkZDwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDo3YzQ4OTMyZS0wM2FjLTIxNDctYTJiZi1iNmViOWU4ZDY2Y2Q8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+MEIzOTNDRjk1RDQ0RDlGMDNFQjEzQkZEQ0UxRDA5MjM8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmQ0ZjMzNDFjLTRkYjctZjc0YS1iZTAxLWYxMGEwMzNhNjg4ZDwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wNC0wMlQxNjo0MToxMCswODowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIEVsZW1lbnRzIDE0LjAgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y29udmVydGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpwYXJhbWV0ZXJzPmZyb20gaW1hZ2UvanBlZyB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5kZXJpdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpwYXJhbWV0ZXJzPmNvbnZlcnRlZCBmcm9tIGltYWdlL2pwZWcgdG8gaW1hZ2UvcG5nPC9zdEV2dDpwYXJhbWV0ZXJzPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo3YzQ4OTMyZS0wM2FjLTIxNDctYTJiZi1iNmViOWU4ZDY2Y2Q8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTgtMDQtMDJUMTY6NDE6MTArMDg6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBFbGVtZW50cyAxNC4wIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOmQ0ZjMzNDFjLTRkYjctZjc0YS1iZTAxLWYxMGEwMzNhNjg4ZDwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+MEIzOTNDRjk1RDQ0RDlGMDNFQjEzQkZEQ0UxRDA5MjM8L3N0UmVmOmRvY3VtZW50SUQ+CiAgICAgICAgICAgIDxzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+MEIzOTNDRjk1RDQ0RDlGMDNFQjEzQkZEQ0UxRDA5MjM8L3N0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHBob3Rvc2hvcDpJQ0NQcm9maWxlPnNSR0IgSUVDNjE5NjYtMi4xPC9waG90b3Nob3A6SUNDUHJvZmlsZT4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTgtMDQtMDJUMTY6MjM6NTUrMDg6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNC0wMlQxNjo0MToxMCswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTgtMDQtMDJUMTY6NDE6MTArMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgUGhvdG9zaG9wIEVsZW1lbnRzIDE0LjAgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx0aWZmOkltYWdlV2lkdGg+MjU0PC90aWZmOkltYWdlV2lkdGg+CiAgICAgICAgIDx0aWZmOkltYWdlTGVuZ3RoPjI1NDwvdGlmZjpJbWFnZUxlbmd0aD4KICAgICAgICAgPHRpZmY6Qml0c1BlclNhbXBsZT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+ODwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpPjg8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaT44PC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC90aWZmOkJpdHNQZXJTYW1wbGU+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpTYW1wbGVzUGVyUGl4ZWw+MzwvdGlmZjpTYW1wbGVzUGVyUGl4ZWw+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpFeGlmVmVyc2lvbj4wMjIxPC9leGlmOkV4aWZWZXJzaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjE1MDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4xNTA8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg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);
  85 + background-size: 22px 22px;
  86 + -moz-background-size: 22px 22px;
  87 + background-repeat: no-repeat;
  88 + position: absolute;
  89 + top: 5px;
  90 + right: 5px;
  91 + height: 22px;
  92 + z-index: 99;
  93 + width: 22px;
  94 +}
  95 +.popup_window {
  96 + display: none;
  97 + position: relative;
  98 + left: 0px;
  99 + top: 0px;
  100 + padding: 10px;
  101 + background-color: #E6E6D6;
  102 + font-family: "Lucida Console", "Courier New", Courier, monospace;
  103 + text-align: left;
  104 + font-size: 8pt;
  105 +}
  106 +
  107 +}
  108 +/* -- report ------------------------------------------------------------------------ */
  109 +#show_detail_line {
  110 + float:left;
  111 + width:100%;
  112 + margin-top: 3ex;
  113 + margin-bottom: 1ex;
  114 +}
  115 +
  116 +#result_table {
  117 + margin: 1em 0;
  118 + width: 100%;
  119 + overflow: hidden;
  120 + background: #FFF;
  121 + color: #024457;
  122 + border-radius: 10px;
  123 + border: 1px solid #167F92;
  124 +}
  125 +#result_table th {
  126 + border: 1px solid #FFFFFF;
  127 + background-color: #167F92;
  128 + color: #FFF;
  129 + padding: 0.5em;
  130 + &:first-child {
  131 + display: table-cell;
  132 + text-align: center;
  133 + }
  134 + &:nth-child(2) {
  135 + display: table-cell;
  136 + span {display:none;}
  137 + &:after {content:attr(data-th);}
  138 + }
  139 + @media (min-width: 480px) {
  140 + &:nth-child(2) {
  141 + span {display: block;}
  142 + &:after {display: none;}
  143 + }
  144 + }
  145 + }
  146 +#result_table td {
  147 + word-wrap: break-word;
  148 + max-width: 7em;
  149 + padding: 0.3em;
  150 + &:first-child {
  151 + display: table-cell;
  152 + text-align: center;
  153 + }
  154 + @media (min-width: 400px) {
  155 + border: 1px solid #D9E4E6;
  156 + }
  157 + }
  158 +
  159 +#result_table th, td {
  160 + margin: .5em 1em;
  161 + @media (min-width: 400px) {
  162 + display: table-cell;
  163 + padding: 1em;
  164 + }
  165 + }
  166 +
  167 +#total_row { font-weight: bold; }
  168 +.passClass { background-color: #6c6; !important ;}
  169 +.failClass { background-color: #c60; !important ;}
  170 +.errorClass { background-color: #c00; !important ; }
  171 +.passCase { color: #6c6; }
  172 +.failCase { color: #c60; font-weight: bold; }
  173 +.errorCase { color: #c00; font-weight: bold; }
  174 +.skipCase { color:#908e8e; font-weight: bold; }
  175 +tr[id^=pt] td { background-color: rgba(73,204,144,.3) !important ; }
  176 +tr[id^=ft] td { background-color: rgba(252,161,48,.3) !important; }
  177 +tr[id^=et] td { background-color: rgba(249,62,62,.3) !important ; }
  178 +tr[id^=st] td { background-color: #6f6f6fa1 !important ; }
  179 +.hiddenRow { display: none; }
  180 +.testcase { margin-left: 2em; }
  181 +
  182 +/* -- ending ---------------------------------------------------------------------- */
  183 +#ending {
  184 +}
  185 +
  186 +.detail_button {
  187 + width: 130px;
  188 + text-decoration: none;
  189 + line-height: 38px;
  190 + text-align: center;
  191 + font-weight: bold;
  192 + color: #ffff;
  193 + border-radius: 6px;
  194 + padding: 5px 10px 5px 10px;
  195 + position: relative;
  196 + overflow: hidden;
  197 +}
  198 +.detail_button.abstract{background-color: #4dbee8;}
  199 +.detail_button.passed{ background-color: #66cc66;}
  200 +.detail_button.failed{ background-color: #cc6600;}
  201 +.detail_button.errored{ background-color: #f54f4f;}
  202 +.detail_button.skiped{ background-color: gray;}
  203 +.detail_button.all{ background-color: blue;}
  204 +.piechart{
  205 + width: 200px;
  206 + float: left;
  207 + display: inline;
  208 +}
  209 +
  210 +
  211 +</style>
  212 +
  213 +</head>
  214 +<body>
  215 +<script language="javascript" type="text/javascript">
  216 +output_list = Array();
  217 +
  218 +/* level - 0:Summary; 1:Passed; 2:Failed; 3:Errored; 4:Skiped; 5:All */
  219 +function showCase(level,channel) {
  220 + trs = document.getElementsByTagName("tr");
  221 + for (var i = 0; i < trs.length; i++) {
  222 + tr = trs[i];
  223 + id = tr.id;
  224 + if (["ft","pt","et","st"].indexOf(id.substr(0,2))!=-1){
  225 + if ( level ==0 && id.substr(2,1)==channel ) {
  226 + tr.className = 'hiddenRow';
  227 + }
  228 + }
  229 +
  230 + if (id.substr(0,3) == 'pt'+channel) {
  231 + if ( level==1){
  232 + tr.className = '';
  233 + }
  234 + else if (level>4 && id.substr(2,1)==channel ){
  235 + tr.className = '';
  236 + }
  237 + else {
  238 + tr.className = 'hiddenRow';
  239 + }
  240 + }
  241 + if (id.substr(0,3) == 'ft'+channel) {
  242 + if (level ==2) {
  243 + tr.className = '';
  244 + }
  245 + else if (level>4 && id.substr(2,1)==channel ){
  246 + tr.className = '';
  247 + }
  248 + else {
  249 + tr.className = 'hiddenRow';
  250 + }
  251 + }
  252 + if (id.substr(0,3) == 'et'+channel) {
  253 + if (level ==3) {
  254 + tr.className = '';
  255 + }
  256 + else if (level>4 && id.substr(2,1)==channel ){
  257 + tr.className = '';
  258 + }
  259 + else {
  260 + tr.className = 'hiddenRow';
  261 + }
  262 + }
  263 + if (id.substr(0,3) == 'st'+channel) {
  264 + if (level ==4) {
  265 + tr.className = '';
  266 + }
  267 + else if (level>4 && id.substr(2,1)==channel ){
  268 + tr.className = '';
  269 + }
  270 + else {
  271 + tr.className = 'hiddenRow';
  272 + }
  273 + }
  274 +
  275 + }
  276 +}
  277 +
  278 +
  279 +function showClassDetail(cid, count) {
  280 + var id_list = Array(count);
  281 + var toHide = 1;
  282 + for (var i = 0; i < count; i++) {
  283 + tid0 = 't' + cid.substr(1) + '.' + (i+1);
  284 + tid = 'f' + tid0;
  285 + tr = document.getElementById(tid);
  286 + if (!tr) {
  287 + tid = 'p' + tid0;
  288 + tr = document.getElementById(tid);
  289 + }
  290 + if (!tr) {
  291 + tid = 'e' + tid0;
  292 + tr = document.getElementById(tid);
  293 + }
  294 + if (!tr) {
  295 + tid = 's' + tid0;
  296 + tr = document.getElementById(tid);
  297 + }
  298 + id_list[i] = tid;
  299 + if (tr.className) {
  300 + toHide = 0;
  301 + }
  302 + }
  303 + for (var i = 0; i < count; i++) {
  304 + tid = id_list[i];
  305 + if (toHide) {
  306 + document.getElementById(tid).className = 'hiddenRow';
  307 + }
  308 + else {
  309 + document.getElementById(tid).className = '';
  310 + }
  311 + }
  312 +}
  313 +
  314 +
  315 +function showTestDetail(div_id){
  316 + var details_div = document.getElementById(div_id)
  317 + var displayState = details_div.style.display
  318 + // alert(displayState)
  319 + if (displayState != 'block' ) {
  320 + displayState = 'block'
  321 + details_div.style.display = 'block'
  322 + }
  323 + else {
  324 + details_div.style.display = 'none'
  325 + }
  326 +}
  327 +
  328 +
  329 +function html_escape(s) {
  330 + s = s.replace(/&/g,'&amp;');
  331 + s = s.replace(/</g,'&lt;');
  332 + s = s.replace(/>/g,'&gt;');
  333 + return s;
  334 +}
  335 +
  336 +function drawCircle(circle,pass, fail, error){
  337 + var color = ["#6c6","#c60","#c00"];
  338 + var data = [pass,fail,error];
  339 + var text_arr = ["Pass", "Fail", "Error"];
  340 +
  341 + var canvas = document.getElementById(circle);
  342 + var ctx = canvas.getContext("2d");
  343 + var startPoint=0;
  344 + var width = 20, height = 10;
  345 + var posX = 112 * 2 + 20, posY = 30;
  346 + var textX = posX + width + 5, textY = posY + 10;
  347 + for(var i=0;i<data.length;i++){
  348 + ctx.fillStyle = color[i];
  349 + ctx.beginPath();
  350 + ctx.moveTo(112,84);
  351 + ctx.arc(112,84,84,startPoint,startPoint+Math.PI*2*(data[i]/(data[0]+data[1]+data[2])),false);
  352 + ctx.fill();
  353 + startPoint += Math.PI*2*(data[i]/(data[0]+data[1]+data[2]));
  354 + ctx.fillStyle = color[i];
  355 + ctx.fillRect(posX, posY + 20 * i, width, height);
  356 + ctx.moveTo(posX, posY + 20 * i);
  357 + ctx.font = 'bold 14px';
  358 + ctx.fillStyle = color[i];
  359 + var percent = text_arr[i] + ":"+data[i];
  360 + ctx.fillText(percent, textX, textY + 20 * i);
  361 +
  362 + }
  363 +}
  364 +
  365 +
  366 +function show_img(obj) {
  367 + var obj1 = obj.nextElementSibling
  368 + obj1.style.display='block'
  369 + var index = 0;//每张图片的下标,
  370 + var len = obj1.getElementsByTagName('img').length;
  371 + var imgyuan = obj1.getElementsByClassName('imgyuan')[0]
  372 + //var start=setInterval(autoPlay,500);
  373 + obj1.onmouseover=function(){//当鼠标光标停在图片上,则停止轮播
  374 + clearInterval(start);
  375 + }
  376 + obj1.onmouseout=function(){//当鼠标光标停在图片上,则开始轮播
  377 + start=setInterval(autoPlay,1000);
  378 + }
  379 + for (var i = 0; i < len; i++) {
  380 + var font = document.createElement('font')
  381 + imgyuan.appendChild(font)
  382 + }
  383 + var lis = obj1.getElementsByTagName('font');//得到所有圆圈
  384 + changeImg(0)
  385 + var funny = function (i) {
  386 + lis[i].onmouseover = function () {
  387 + index=i
  388 + changeImg(i)
  389 + }
  390 + }
  391 + for (var i = 0; i < lis.length; i++) {
  392 + funny(i);
  393 + }
  394 +
  395 + function autoPlay(){
  396 + if(index>len-1){
  397 + index=0;
  398 + clearInterval(start); //运行一轮后停止
  399 + }
  400 + changeImg(index++);
  401 + }
  402 + imgyuan.style.width= 25*len +"px";
  403 + //对应圆圈和图片同步
  404 + function changeImg(index) {
  405 + var list = obj1.getElementsByTagName('img');
  406 + var list1 = obj1.getElementsByTagName('font');
  407 + for (i = 0; i < list.length; i++) {
  408 + list[i].style.display = 'none';
  409 + list1[i].style.backgroundColor = 'white';
  410 + }
  411 + list[index].style.display = 'block';
  412 + list1[index].style.backgroundColor = 'blue';
  413 + }
  414 +
  415 +}
  416 +function hide_img(obj){
  417 + obj.parentElement.style.display = "none";
  418 + obj.parentElement.getElementsByClassName('imgyuan')[0].innerHTML = "";
  419 +}
  420 +</script>
  421 +<div class='heading'>
  422 +<h1>搜索功能测试报告</h1>
  423 +<p class='attribute'><strong>开始时间:</strong> 2021-06-22 16:10:41</p>
  424 +<p class='attribute'><strong>耗时:</strong> 0:00:15.376888</p>
  425 +<p class='attribute'><strong>状态:</strong> <span class="tj passCase">Pass</span>:9 <span class="tj failCase">Failure</span>:3 <span class="tj errorCase">Error</span>:3 <span class="tj skipCase">Skip</span>:1 <span class="tj">通过率</span>:60.0%</p>
  426 +
  427 +<p class='description'>用例执行情况:</p>
  428 +</div>
  429 +
  430 +
  431 +<div class="piechart">
  432 + <div>
  433 + <canvas id="circle1" width="350" height="168" </canvas>
  434 + </div>
  435 +</div>
  436 +
  437 +<div id='show_detail_line' style=" float: left; width: 100%;">
  438 +<a class="abstract detail_button" href='javascript:showCase(0,1)'>概要[60.00%]</a>
  439 +<a class="passed detail_button" href='javascript:showCase(1,1)'>通过[9]</a>
  440 +<a class="failed detail_button" href='javascript:showCase(2,1)'>失败[3]</a>
  441 +<a class="errored detail_button" href='javascript:showCase(3,1)'>错误[3]</a>
  442 +<a class="skiped detail_button" href='javascript:showCase(4,1)'>跳过[1]</a>
  443 +<a class="all detail_button" href='javascript:showCase(5,1)'>所有[15]</a>
  444 +</div>
  445 +
  446 +<table id='result_table'>
  447 +<colgroup>
  448 +<col align='left' />
  449 +<col align='right' />
  450 +<col align='right' />
  451 +<col align='right' />
  452 +<col align='right' />
  453 +<col align='right' />
  454 +<col align='right' />
  455 +</colgroup>
  456 +<tr id='header_row'>
  457 + <th>测试组/测试用例</th>
  458 + <th>总数</th>
  459 + <th>通过</th>
  460 + <th>失败</th>
  461 + <th>错误</th>
  462 + <th>视图</th>
  463 + <th>错误截图</th>
  464 +</tr>
  465 +
  466 +<tr class='errorClass'>
  467 + <td>unittest.suite._ErrorHolder</td>
  468 + <td>1</td>
  469 + <td>0</td>
  470 + <td>0</td>
  471 + <td>1</td>
  472 + <td><a href="javascript:showClassDetail('c1.1',1)">详情</a></td>
  473 + <td>&nbsp;</td>
  474 +</tr>
  475 +
  476 +<tr id='et1.1.1' class='none'>
  477 + <td ><div class='testcase'>test_doAdd)</div></td>
  478 + <td colspan='5' align='center'>
  479 +
  480 + <!--css div popup start-->
  481 + <span class='status errorCase'>
  482 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_et1.1.1')" >
  483 + 错误</a></span>
  484 +
  485 + <div id='div_et1.1.1' class="popup_window">
  486 + <div style='text-align: right; color:red;cursor:pointer'>
  487 + <a onfocus='this.blur();' onclick="document.getElementById('div_et1.1.1').style.display = 'none' " >
  488 + [x]</a>
  489 + </div>
  490 + <pre>
  491 +
  492 +et1.1.1: Traceback (most recent call last):
  493 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\doAdd\test_doAdd.py", line 22, in setUpClass
  494 + field.post("user01",url=field.url,headers=field.header,json=field.body)
  495 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\commons\api\fieldConfig.py", line 37, in post
  496 + ll.close_session()
  497 +AttributeError: 'login' object has no attribute 'close_session'
  498 +
  499 +
  500 + </pre>
  501 + </div>
  502 + <!--css div popup end-->
  503 +
  504 + </td>
  505 + <td>无截图</td>
  506 +</tr>
  507 +
  508 +<tr class='passClass'>
  509 + <td>doAudit.test_doAudit.test_doAudit: #登记单审核接口</td>
  510 + <td>4</td>
  511 + <td>4</td>
  512 + <td>0</td>
  513 + <td>0</td>
  514 + <td><a href="javascript:showClassDetail('c1.2',4)">详情</a></td>
  515 + <td>&nbsp;</td>
  516 +</tr>
  517 +
  518 +<tr id='pt1.2.1' class='hiddenRow'>
  519 + <td ><div class='testcase'>test_01_doAudit: 审核通过</div></td>
  520 + <td colspan='5' align='center'>
  521 +
  522 + <!--css div popup start-->
  523 + <span class='status passCase'>
  524 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.2.1')" >
  525 + 通过</a></span>
  526 +
  527 + <div id='div_pt1.2.1' class="popup_window">
  528 + <div style='text-align: right; color:red;cursor:pointer'>
  529 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.2.1').style.display = 'none' " >
  530 + [x]</a>
  531 + </div>
  532 + <pre>
  533 +
  534 +pt1.2.1: {'code': '200', 'message': '操作成功', 'result': '操作成功', 'success': True}
  535 +
  536 +
  537 + </pre>
  538 + </div>
  539 + <!--css div popup end-->
  540 +
  541 + </td>
  542 + <td>无截图</td>
  543 +</tr>
  544 +
  545 +<tr id='pt1.2.2' class='hiddenRow'>
  546 + <td ><div class='testcase'>test_02_doAudit: 审核不通过</div></td>
  547 + <td colspan='5' align='center'>
  548 +
  549 + <!--css div popup start-->
  550 + <span class='status passCase'>
  551 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.2.2')" >
  552 + 通过</a></span>
  553 +
  554 + <div id='div_pt1.2.2' class="popup_window">
  555 + <div style='text-align: right; color:red;cursor:pointer'>
  556 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.2.2').style.display = 'none' " >
  557 + [x]</a>
  558 + </div>
  559 + <pre>
  560 +
  561 +pt1.2.2: {'code': '200', 'message': '操作成功', 'result': '操作成功', 'success': True}
  562 +
  563 +
  564 + </pre>
  565 + </div>
  566 + <!--css div popup end-->
  567 +
  568 + </td>
  569 + <td>无截图</td>
  570 +</tr>
  571 +
  572 +<tr id='pt1.2.3' class='hiddenRow'>
  573 + <td ><div class='testcase'>test_03_doAudit: 审核不通过</div></td>
  574 + <td colspan='5' align='center'>
  575 +
  576 + <!--css div popup start-->
  577 + <span class='status passCase'>
  578 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.2.3')" >
  579 + 通过</a></span>
  580 +
  581 + <div id='div_pt1.2.3' class="popup_window">
  582 + <div style='text-align: right; color:red;cursor:pointer'>
  583 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.2.3').style.display = 'none' " >
  584 + [x]</a>
  585 + </div>
  586 + <pre>
  587 +
  588 +pt1.2.3: {'code': '200', 'message': '操作成功', 'result': '操作成功', 'success': True}
  589 +
  590 +
  591 + </pre>
  592 + </div>
  593 + <!--css div popup end-->
  594 +
  595 + </td>
  596 + <td>无截图</td>
  597 +</tr>
  598 +
  599 +<tr id='pt1.2.4' class='hiddenRow'>
  600 + <td ><div class='testcase'>test_04_doAudit: 审核一个已经完成审核的登记单</div></td>
  601 + <td colspan='5' align='center'>
  602 +
  603 + <!--css div popup start-->
  604 + <span class='status passCase'>
  605 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.2.4')" >
  606 + 通过</a></span>
  607 +
  608 + <div id='div_pt1.2.4' class="popup_window">
  609 + <div style='text-align: right; color:red;cursor:pointer'>
  610 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.2.4').style.display = 'none' " >
  611 + [x]</a>
  612 + </div>
  613 + <pre>
  614 +
  615 +pt1.2.4: {'code': '5000', 'message': '操作失败,数据状态已改变', 'result': '操作失败,数据状态已改变', 'success': False}
  616 +
  617 +
  618 + </pre>
  619 + </div>
  620 + <!--css div popup end-->
  621 +
  622 + </td>
  623 + <td>无截图</td>
  624 +</tr>
  625 +
  626 +<tr class='failClass'>
  627 + <td>fieldConfig.test_fieldConfig.test_fieldConfig: Unittest用例结构的简单的认识</td>
  628 + <td>3</td>
  629 + <td>2</td>
  630 + <td>1</td>
  631 + <td>0</td>
  632 + <td><a href="javascript:showClassDetail('c1.3',3)">详情</a></td>
  633 + <td>&nbsp;</td>
  634 +</tr>
  635 +
  636 +<tr id='pt1.3.1' class='hiddenRow'>
  637 + <td ><div class='testcase'>test_01_fieldConfig</div></td>
  638 + <td colspan='5' align='center'>
  639 +
  640 + <!--css div popup start-->
  641 + <span class='status passCase'>
  642 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.3.1')" >
  643 + 通过</a></span>
  644 +
  645 + <div id='div_pt1.3.1' class="popup_window">
  646 + <div style='text-align: right; color:red;cursor:pointer'>
  647 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.3.1').style.display = 'none' " >
  648 + [x]</a>
  649 + </div>
  650 + <pre>
  651 +
  652 +pt1.3.1: setUp
  653 +test_01_fieldConfig
  654 +tearDown
  655 +
  656 +
  657 + </pre>
  658 + </div>
  659 + <!--css div popup end-->
  660 +
  661 + </td>
  662 + <td>无截图</td>
  663 +</tr>
  664 +
  665 +<tr id='pt1.3.2' class='hiddenRow'>
  666 + <td ><div class='testcase'>test_02_fieldConfig</div></td>
  667 + <td colspan='5' align='center'>
  668 +
  669 + <!--css div popup start-->
  670 + <span class='status passCase'>
  671 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.3.2')" >
  672 + 通过</a></span>
  673 +
  674 + <div id='div_pt1.3.2' class="popup_window">
  675 + <div style='text-align: right; color:red;cursor:pointer'>
  676 + <a onfocus='this.blur();' onclick="document.getElementById('div_pt1.3.2').style.display = 'none' " >
  677 + [x]</a>
  678 + </div>
  679 + <pre>
  680 +
  681 +pt1.3.2: setUp
  682 +test_02_fieldConfig
  683 +tearDown
  684 +
  685 +
  686 + </pre>
  687 + </div>
  688 + <!--css div popup end-->
  689 +
  690 + </td>
  691 + <td>无截图</td>
  692 +</tr>
  693 +
  694 +<tr id='ft1.3.3' class='none'>
  695 + <td ><div class='testcase'>test_03_fieldConfig: _retry:2</div></td>
  696 + <td colspan='5' align='center'>
  697 +
  698 + <!--css div popup start-->
  699 + <span class='status failCase'>
  700 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.3.3')" >
  701 + 失败</a></span>
  702 +
  703 + <div id='div_ft1.3.3' class="popup_window">
  704 + <div style='text-align: right; color:red;cursor:pointer'>
  705 + <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.3.3').style.display = 'none' " >
  706 + [x]</a>
  707 + </div>
  708 + <pre>
  709 +
  710 +ft1.3.3: setUp
  711 +test_03_fieldConfig
  712 +tearDown
  713 +Traceback (most recent call last):
  714 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\fieldConfig\test_fieldConfig.py", line 26, in test_03_fieldConfig
  715 + self.assertEqual(100, 200, "测试使用")
  716 +AssertionError: 100 != 200 : 测试使用
  717 +
  718 +
  719 + </pre>
  720 + </div>
  721 + <!--css div popup end-->
  722 +
  723 + </td>
  724 + <td>无截图</td>
  725 +</tr>
  726 +
  727 +<tr id='st1.3.4' class='none'>
  728 + <td ><div class='testcase'>test_04_fieldConfig</div></td>
  729 + <td colspan='5' align='center'>
  730 +
  731 + <!--css div popup start-->
  732 + <span class='status passCase'>
  733 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_st1.3.4')" >
  734 + 跳过</a></span>
  735 +
  736 + <div id='div_st1.3.4' class="popup_window">
  737 + <div style='text-align: right; color:red;cursor:pointer'>
  738 + <a onfocus='this.blur();' onclick="document.getElementById('div_st1.3.4').style.display = 'none' " >
  739 + [x]</a>
  740 + </div>
  741 + <pre>
  742 +
  743 +st1.3.4: 执行时强制跳过该用例
  744 +
  745 + </pre>
  746 + </div>
  747 + <!--css div popup end-->
  748 +
  749 + </td>
  750 + <td>无截图</td>
  751 +</tr>
  752 +
  753 +<tr class='passClass'>
  754 + <td>login.test_login.test_login: 登录接口</td>
  755 + <td>3</td>
  756 + <td>3</td>
  757 + <td>0</td>
  758 + <td>0</td>
  759 + <td><a href="javascript:showClassDetail('c1.4',3)">详情</a></td>
  760 + <td>&nbsp;</td>
  761 +</tr>
  762 +
  763 +<tr id='pt1.4.1' class='hiddenRow'>
  764 + <td><div class='testcase'>test_01_login: 账户密码都正确</div></td>
  765 + <td colspan='5' align='center'><span class='status passCase'>通过</span></td>
  766 + <td>无截图</td>
  767 +</tr>
  768 +
  769 +<tr id='pt1.4.2' class='hiddenRow'>
  770 + <td><div class='testcase'>test_02_login: 密码错误</div></td>
  771 + <td colspan='5' align='center'><span class='status passCase'>通过</span></td>
  772 + <td>无截图</td>
  773 +</tr>
  774 +
  775 +<tr id='pt1.4.3' class='hiddenRow'>
  776 + <td><div class='testcase'>test_03_login: 账户错误</div></td>
  777 + <td colspan='5' align='center'><span class='status passCase'>通过</span></td>
  778 + <td>无截图</td>
  779 +</tr>
  780 +
  781 +<tr class='failClass'>
  782 + <td>upStream.test_upStream.test_upStream1: 上游企业列表查询接口</td>
  783 + <td>2</td>
  784 + <td>0</td>
  785 + <td>2</td>
  786 + <td>0</td>
  787 + <td><a href="javascript:showClassDetail('c1.5',2)">详情</a></td>
  788 + <td>&nbsp;</td>
  789 +</tr>
  790 +
  791 +<tr id='ft1.5.1' class='none'>
  792 + <td ><div class='testcase'>test_01_upStream1: 成功查询上下游企业,无过滤条件_retry:2</div></td>
  793 + <td colspan='5' align='center'>
  794 +
  795 + <!--css div popup start-->
  796 + <span class='status failCase'>
  797 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.5.1')" >
  798 + 失败</a></span>
  799 +
  800 + <div id='div_ft1.5.1' class="popup_window">
  801 + <div style='text-align: right; color:red;cursor:pointer'>
  802 + <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.5.1').style.display = 'none' " >
  803 + [x]</a>
  804 + </div>
  805 + <pre>
  806 +
  807 +ft1.5.1: {'code': '401', 'message': '登录超时', 'result': '登录超时', 'success': False}
  808 +Traceback (most recent call last):
  809 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\upStream\test_upStream.py", line 27, in test_01_upStream1
  810 + self.assertTrue("total" in re.json().keys())
  811 +AssertionError: False is not true
  812 +
  813 +
  814 + </pre>
  815 + </div>
  816 + <!--css div popup end-->
  817 +
  818 + </td>
  819 + <td>无截图</td>
  820 +</tr>
  821 +
  822 +<tr id='ft1.5.2' class='none'>
  823 + <td ><div class='testcase'>test_02_upStream1: 成功查询上下游企业,加入企业/个人名称过滤条件_retry:2</div></td>
  824 + <td colspan='5' align='center'>
  825 +
  826 + <!--css div popup start-->
  827 + <span class='status failCase'>
  828 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.5.2')" >
  829 + 失败</a></span>
  830 +
  831 + <div id='div_ft1.5.2' class="popup_window">
  832 + <div style='text-align: right; color:red;cursor:pointer'>
  833 + <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.5.2').style.display = 'none' " >
  834 + [x]</a>
  835 + </div>
  836 + <pre>
  837 +
  838 +ft1.5.2: {'code': '401', 'message': '登录超时', 'result': '登录超时', 'success': False}
  839 +Traceback (most recent call last):
  840 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\upStream\test_upStream.py", line 40, in test_02_upStream1
  841 + self.assertTrue("legalPerson':'哈哈哈'" in str(re.json()).replace(" ",""))
  842 +AssertionError: False is not true
  843 +
  844 +
  845 + </pre>
  846 + </div>
  847 + <!--css div popup end-->
  848 +
  849 + </td>
  850 + <td>无截图</td>
  851 +</tr>
  852 +
  853 +<tr class='errorClass'>
  854 + <td>upStream.test_upStream.test_upStream2: 上游企业列表查询接口2</td>
  855 + <td>2</td>
  856 + <td>0</td>
  857 + <td>0</td>
  858 + <td>2</td>
  859 + <td><a href="javascript:showClassDetail('c1.6',2)">详情</a></td>
  860 + <td>&nbsp;</td>
  861 +</tr>
  862 +
  863 +<tr id='et1.6.1' class='none'>
  864 + <td ><div class='testcase'>test_01_upStream2: 成功查询上下游企业,加入企业/个人名称过滤条件_retry:2</div></td>
  865 + <td colspan='5' align='center'>
  866 +
  867 + <!--css div popup start-->
  868 + <span class='status errorCase'>
  869 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_et1.6.1')" >
  870 + 错误</a></span>
  871 +
  872 + <div id='div_et1.6.1' class="popup_window">
  873 + <div style='text-align: right; color:red;cursor:pointer'>
  874 + <a onfocus='this.blur();' onclick="document.getElementById('div_et1.6.1').style.display = 'none' " >
  875 + [x]</a>
  876 + </div>
  877 + <pre>
  878 +
  879 +et1.6.1: Traceback (most recent call last):
  880 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\upStream\test_upStream.py", line 55, in test_01_upStream2
  881 + re=uu.post("user01",url=uu.url,headers=uu.header,json=body)
  882 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\commons\api\upStream.py", line 38, in post
  883 + ll.close_session()
  884 +AttributeError: 'login' object has no attribute 'close_session'
  885 +
  886 +
  887 + </pre>
  888 + </div>
  889 + <!--css div popup end-->
  890 +
  891 + </td>
  892 + <td>无截图</td>
  893 +</tr>
  894 +
  895 +<tr id='et1.6.2' class='none'>
  896 + <td ><div class='testcase'>test_02_upStream2: 成功查询上下游企业,加入业户名称名称过滤条件_retry:2</div></td>
  897 + <td colspan='5' align='center'>
  898 +
  899 + <!--css div popup start-->
  900 + <span class='status errorCase'>
  901 + <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_et1.6.2')" >
  902 + 错误</a></span>
  903 +
  904 + <div id='div_et1.6.2' class="popup_window">
  905 + <div style='text-align: right; color:red;cursor:pointer'>
  906 + <a onfocus='this.blur();' onclick="document.getElementById('div_et1.6.2').style.display = 'none' " >
  907 + [x]</a>
  908 + </div>
  909 + <pre>
  910 +
  911 +et1.6.2: Traceback (most recent call last):
  912 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\testcase\upStream\test_upStream.py", line 66, in test_02_upStream2
  913 + re=uu.post("user01",url=uu.url,headers=uu.header,json=body)
  914 + File "E:\EclipseWorkspace\WorksapceDemo\Request-demo-dili\src\commons\api\upStream.py", line 38, in post
  915 + ll.close_session()
  916 +AttributeError: 'login' object has no attribute 'close_session'
  917 +
  918 +
  919 + </pre>
  920 + </div>
  921 + <!--css div popup end-->
  922 +
  923 + </td>
  924 + <td>无截图</td>
  925 +</tr>
  926 +
  927 +<tr id='total_row'>
  928 + <th>统计</th>
  929 + <th>15</th>
  930 + <th>9</th>
  931 + <th>3</th>
  932 + <th>3</th>
  933 + <th>&nbsp;</th>
  934 + <th>&nbsp;</th>
  935 +</tr>
  936 +</table>
  937 +<script>
  938 + showCase(0,1);
  939 + drawCircle('circle1',9, 3, 3);
  940 +</script>
  941 +
  942 +<div id='ending'>&nbsp;</div>
  943 +
  944 +</body>
  945 +</html>
... ...