Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Sign in / Register
Toggle navigation
Z
znfz_autotest
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
qianyanyan
znfz_autotest
Commits
5b5d96f4
Commit
5b5d96f4
authored
Jun 24, 2020
by
gaotao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加删除嫌疑人,搜索案件
parent
dc3f9bdf
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
207 additions
and
426 deletions
+207
-426
basepage/__init__.py
basepage/__init__.py
+24
-0
basepage/browser_engine.py
basepage/browser_engine.py
+40
-16
basepage/check_gsjd.py
basepage/check_gsjd.py
+16
-17
basepage/logger.py
basepage/logger.py
+1
-1
basepage/read_config.py
basepage/read_config.py
+1
-1
config/config.ini
config/config.ini
+2
-1
test_cases/pytest.ini
test_cases/pytest.ini
+10
-3
test_cases/test_gsjd.py
test_cases/test_gsjd.py
+1
-1
test_cases/test_index.py
test_cases/test_index.py
+33
-0
test_cases/test_jbaq.py
test_cases/test_jbaq.py
+70
-0
test_cases/test_login.py
test_cases/test_login.py
+9
-19
test_report/report.html
test_report/report.html
+0
-367
No files found.
basepage/__init__.py
View file @
5b5d96f4
from
.browser_engine
import
BrowserEngine
import
os
def
get_engine
(
file
,
url
):
def
inner
(
f
):
def
wapper
(
*
args
,
**
kwargs
):
try
:
if
file
:
log_name
=
os
.
path
.
split
(
file
)[
-
1
]
.
split
(
"."
)[
0
]
engine
=
BrowserEngine
(
log_name
,
url
)
else
:
engine
=
BrowserEngine
(
url
=
url
)
ret
=
f
(
engine
,
*
args
,
**
kwargs
)
if
engine
.
driver
:
engine
.
driver
.
quit
()
if
engine
:
del
engine
return
ret
except
Exception
as
e
:
print
(
e
)
return
wapper
return
inner
basepage/browser_engine.py
View file @
5b5d96f4
...
@@ -9,13 +9,20 @@ from basepage.logger import Logger
...
@@ -9,13 +9,20 @@ from basepage.logger import Logger
class
BrowserEngine
(
ReadConfig
):
class
BrowserEngine
(
ReadConfig
):
__log_name
=
"browser_engine"
__log_name
=
"browser_engine"
def
__init__
(
self
,
log_name
=
__log_name
):
def
__init__
(
self
,
log_name
=
__log_name
,
url
=
'URL'
):
super
()
.
__init__
(
log_name
)
super
()
.
__init__
(
log_name
)
# self.__logger = super().get_logger()
# self.__logger = super().get_logger()
self
.
_browser
=
''
self
.
_browser
=
''
self
.
url
=
url
self
.
_driver_path
=
r"C:\Users\80980\znfz_autotest\driver\chromedriver.exe"
self
.
_driver_path
=
r"C:\Users\80980\znfz_autotest\driver\chromedriver.exe"
self
.
_driver
=
webdriver
.
Chrome
(
self
.
_driver_path
)
# def init(self):
self
.
driver
=
webdriver
.
Chrome
(
self
.
_driver_path
)
self
.
open_browser
()
self
.
open_browser
()
self
.
login_znfz
()
self
.
get_page
()
self
.
driver
.
xpath
=
self
.
driver
.
find_elements_by_xpath
def
open_browser
(
self
):
def
open_browser
(
self
):
browser
=
self
.
get_browserType
(
'browserName'
)
browser
=
self
.
get_browserType
(
'browserName'
)
...
@@ -24,43 +31,60 @@ class BrowserEngine(ReadConfig):
...
@@ -24,43 +31,60 @@ class BrowserEngine(ReadConfig):
# driver = webdriver.Chrome(r"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
# driver = webdriver.Chrome(r"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
self
.
_
driver
.
get
(
url
)
self
.
driver
.
get
(
url
)
self
.
logger
.
info
(
"Open url:
%
s"
%
url
)
self
.
logger
.
info
(
"Open url:
%
s"
%
url
)
time
.
sleep
(
3
)
time
.
sleep
(
1
)
self
.
_
driver
.
maximize_window
()
self
.
driver
.
maximize_window
()
self
.
logger
.
info
(
"Maximize the current window."
)
self
.
logger
.
info
(
"Maximize the current window."
)
self
.
_
driver
.
implicitly_wait
(
10
)
self
.
driver
.
implicitly_wait
(
10
)
self
.
logger
.
info
(
"Set implicitly wait 10 seconds."
)
self
.
logger
.
info
(
"Set implicitly wait 10 seconds."
)
return
self
.
_
driver
return
self
.
driver
def
login_znfz
(
self
):
def
login_znfz
(
self
):
if
self
.
url
==
'LOGIN'
:
return
username
=
self
.
get_userInfo
(
'username'
)
username
=
self
.
get_userInfo
(
'username'
)
password
=
self
.
get_userInfo
(
'password'
)
password
=
self
.
get_userInfo
(
'password'
)
url
=
self
.
get_testUrl
(
'URL'
)
print
(
username
,
password
,
url
)
self
.
logger
.
info
(
"username:
%
s"
%
username
)
self
.
logger
.
info
(
"username:
%
s"
%
username
)
# logger.info(string.Formatter("username: %s, password: %s, open url: %s", username, password, url))
# logger.info(string.Formatter("username: %s, password: %s, open url: %s", username, password, url))
# logger.info("password :%s" % password)
# logger.info("password :%s" % password)
# logger.info("Open url: %s" % url)
# logger.info("Open url: %s" % url)
tags
=
self
.
_
driver
.
find_element_by_xpath
(
'//*[@id="root"]/div/div/div[2]/form/div[1]/div/div/span/span/span'
)
tags
=
self
.
driver
.
find_element_by_xpath
(
'//*[@id="root"]/div/div/div[2]/form/div[1]/div/div/span/span/span'
)
self
.
logger
.
info
(
"tags.text:
%
s"
%
tags
.
text
)
self
.
logger
.
info
(
"tags.text:
%
s"
%
tags
.
text
)
# print(tags.text)
# print(tags.text)
tags
.
click
()
tags
.
click
()
time
.
sleep
(
1
)
time
.
sleep
(
1
)
self
.
_
driver
.
find_element_by_xpath
(
'//*[@id="rc-tree-select-list_1"]/ul/li/ul/li[3]/span[1]'
)
.
click
()
self
.
driver
.
find_element_by_xpath
(
'//*[@id="rc-tree-select-list_1"]/ul/li/ul/li[3]/span[1]'
)
.
click
()
tags2
=
self
.
_
driver
.
find_element_by_xpath
(
'//*[@id="rc-tree-select-list_1"]/ul/li/ul/li[3]/ul/li[3]/span[2]/span'
)
tags2
=
self
.
driver
.
find_element_by_xpath
(
'//*[@id="rc-tree-select-list_1"]/ul/li/ul/li[3]/ul/li[3]/span[2]/span'
)
self
.
logger
.
info
(
"tags2.text:
%
s"
%
tags2
.
text
)
self
.
logger
.
info
(
"tags2.text:
%
s"
%
tags2
.
text
)
# print(tags2.text)
# print(tags2.text)
tags2
.
click
()
tags2
.
click
()
time
.
sleep
(
1
)
time
.
sleep
(
1
)
self
.
_driver
.
find_element_by_xpath
(
'//*[@id="username"]'
)
.
send_keys
(
username
)
self
.
driver
.
find_element_by_xpath
(
'//*[@id="username"]'
)
.
send_keys
(
username
)
self
.
_driver
.
find_element_by_xpath
(
'//*[@id="password"]'
)
.
send_keys
(
password
)
self
.
driver
.
find_element_by_xpath
(
'//*[@id="password"]'
)
.
send_keys
(
password
)
self
.
_driver
.
find_element_by_xpath
(
'//*[@id="root"]/div/div/div[2]/form/div[4]/div/div/span/button'
)
.
click
()
self
.
driver
.
find_element_by_xpath
(
'//*[@id="root"]/div/div/div[2]/form/div[4]/div/div/span/button'
)
.
click
()
return
self
.
_driver
return
self
.
driver
def
get_page
(
self
):
time
.
sleep
(
1
)
if
self
.
url
in
[
'LOGIN'
,
'INDEX'
]:
return
if
self
.
url
!=
'URL'
:
url
=
self
.
get_testUrl
(
self
.
url
)
url
=
url
.
format
(
bmsah
=
self
.
get_caseId
(
'caseId'
))
if
'{'
in
url
else
url
self
.
logger
.
info
(
"the testUrl :
%
s"
%
url
)
self
.
driver
.
get
(
url
)
def
__del__
(
self
):
try
:
self
.
driver
.
quit
()
except
:
pass
'''
'''
...
...
basepage/check_gsjd.py
View file @
5b5d96f4
...
@@ -23,25 +23,24 @@ class CheckGsjd(BrowserEngine):
...
@@ -23,25 +23,24 @@ class CheckGsjd(BrowserEngine):
return
self
.
_driver
return
self
.
_driver
# 选择审查起诉案件
# 选择审查起诉案件
def
choose_gsjd_case
(
self
):
#
def choose_gsjd_case(self):
caseId
=
self
.
get_caseId
(
'caseId'
)
#
caseId = self.get_caseId('caseId')
self
.
logger
.
info
(
"the caseId :
%
s"
%
caseId
)
#
self.logger.info("the caseId : %s" % caseId)
# driver.find_element_by_xpath('/html/body/div[1]/div/section/section/main/div/div[2]/div/div/div[1]/form/div[1]/div[3]/input').send_keys(caseId)
#
# driver.find_element_by_xpath('/html/body/div[1]/div/section/section/main/div/div[2]/div/div/div[1]/form/div[1]/div[3]/input').send_keys(caseId)
self
.
_driver
.
find_element_by_xpath
(
'//*[@id="ajmc"]'
)
.
send_keys
(
caseId
)
#
self._driver.find_element_by_xpath('//*[@id="ajmc"]').send_keys(caseId)
# 点击按钮
#
# 点击按钮
self
.
_driver
.
find_element_by_xpath
(
#
self._driver.find_element_by_xpath(
'/html/body/div[1]/div/section/section/main/div/div[2]/div/div/div[1]/form/div[2]/div/button[2]'
)
.
click
()
#
'/html/body/div[1]/div/section/section/main/div/div[2]/div/div/div[1]/form/div[2]/div/button[2]').click()
time
.
sleep
(
5
)
#
time.sleep(5)
# 点击办理
#
# 点击办理
tags
=
self
.
_driver
.
find_element_by_xpath
(
#
tags = self._driver.find_element_by_xpath(
'/html/body/div[1]/div/section/section/main/div/div[2]/div/div/div[2]/div[2]/div/div/div/div/div/div[2]/table/tbody/tr/td[7]/p/a'
)
#
'/html/body/div[1]/div/section/section/main/div/div[2]/div/div/div[2]/div[2]/div/div/div/div/div/div[2]/table/tbody/tr/td[7]/p/a')
# print(tags.text)
#
# print(tags.text)
self
.
logger
.
info
(
"tags.text:
%
s"
%
tags
.
text
)
#
self.logger.info("tags.text:%s" % tags.text)
tags
.
click
()
#
tags.click()
# driver.find_element_by_tag_name(tags.text).click()
# driver.find_element_by_tag_name(tags.text).click()
def
__del__
(
self
):
self
.
_driver
.
quit
()
# if __name__ == '__main__':
# if __name__ == '__main__':
# test = CheckGsjd()
# test = CheckGsjd()
...
...
basepage/logger.py
View file @
5b5d96f4
...
@@ -13,7 +13,7 @@ class Logger(object):
...
@@ -13,7 +13,7 @@ class Logger(object):
def
init_logger
(
self
,
):
def
init_logger
(
self
,
):
self
.
logger
.
setLevel
(
logging
.
DEBUG
)
self
.
logger
.
setLevel
(
logging
.
DEBUG
)
rq
=
time
.
strftime
(
'
%
Y
%
m
%
d
%
H
%
M
'
,
time
.
localtime
(
time
.
time
()))
rq
=
time
.
strftime
(
'
%
Y
%
m
%
d'
,
time
.
localtime
(
time
.
time
()))
log_path
=
os
.
path
.
dirname
(
os
.
path
.
abspath
(
'.'
))
+
'/logs/'
log_path
=
os
.
path
.
dirname
(
os
.
path
.
abspath
(
'.'
))
+
'/logs/'
log_name
=
log_path
+
rq
+
'.log'
log_name
=
log_path
+
rq
+
'.log'
...
...
basepage/read_config.py
View file @
5b5d96f4
...
@@ -35,7 +35,7 @@ class ReadConfig(Logger):
...
@@ -35,7 +35,7 @@ class ReadConfig(Logger):
def
get_testUrl
(
self
,
param
):
def
get_testUrl
(
self
,
param
):
value
=
self
.
cf
.
get
(
"testUrl"
,
param
)
value
=
self
.
cf
.
get
(
"testUrl"
,
param
)
self
.
logger
.
info
(
"the testUrl :
%
s"
%
value
)
#
self.logger.info("the testUrl : %s" % value)
return
value
return
value
def
get_userInfo
(
self
,
param
):
def
get_userInfo
(
self
,
param
):
...
...
config/config.ini
View file @
5b5d96f4
...
@@ -7,6 +7,7 @@ browserName = Chrome
...
@@ -7,6 +7,7 @@ browserName = Chrome
[testUrl]
[testUrl]
#URL = https://www.baidu.com
#URL = https://www.baidu.com
URL
=
http://192.168.2.31/cm
URL
=
http://192.168.2.31/cm
JBAQ_URL
=
http://192.168.2.31/cm/currencydeal/{bmsah}/case?bmsah={bmsah}
[userInfo]
[userInfo]
username
=
周朝阳
username
=
周朝阳
password
=
qazwsxedc
password
=
qazwsxedc
...
@@ -21,4 +22,4 @@ database=cmrobot
...
@@ -21,4 +22,4 @@ database=cmrobot
#起诉案件
#起诉案件
[gsjdCase]
[gsjdCase]
#考虑循环
#考虑循环
caseId
=
33030401160
caseId
=
瓯检起诉受[2020]33030400557号
test_cases/pytest.ini
View file @
5b5d96f4
[pytest]
[pytest]
markers
=
case1
;log_format = %(asctime)s %(levelname)s %(message)s
case2
log_date_format
=
%Y-%m-%d %H:%M:%S
case3
\ No newline at end of file
markers
=
login
select
addxyr
delxyr
gsjd
case4
case5
\ No newline at end of file
test_cases/test_gsjd.py
View file @
5b5d96f4
...
@@ -5,7 +5,7 @@ sys.path.append('..')
...
@@ -5,7 +5,7 @@ sys.path.append('..')
from
basepage.browser_engine
import
BrowserEngine
from
basepage.browser_engine
import
BrowserEngine
from
basepage.check_gsjd
import
CheckGsjd
from
basepage.check_gsjd
import
CheckGsjd
@
pytest
.
mark
.
case3
@
pytest
.
mark
.
gsjd
def
test_gsid_case1
():
def
test_gsid_case1
():
# browser = BrowserEngine()
# browser = BrowserEngine()
...
...
test_cases/test_index.py
0 → 100644
View file @
5b5d96f4
import
pytest
,
time
from
basepage
import
get_engine
'''
测试主页面的功能
'''
@
pytest
.
mark
.
select
@
get_engine
(
__file__
,
'INDEX'
)
def
test_select
(
engine
):
'''搜索功能'''
bmsah
=
engine
.
get_caseId
(
'caseId'
)
engine
.
logger
.
info
(
'bmsah:'
+
bmsah
)
scqs_button
=
engine
.
driver
.
xpath
(
"//span[text()='审查起诉']/.."
)[
0
]
scqs_button
.
click
()
time
.
sleep
(
0.5
)
anjian_list
=
engine
.
driver
.
xpath
(
"//div[@class='ant-table-body']//tr"
)
engine
.
logger
.
info
(
'案件列表长度:{}'
.
format
(
len
(
anjian_list
)))
input_button
=
engine
.
driver
.
xpath
(
"//input[@id='ajmc']"
)[
0
]
input_button
.
send_keys
(
bmsah
)
engine
.
logger
.
info
(
'输入受案号'
)
time
.
sleep
(
0.5
)
submit_button
=
engine
.
driver
.
xpath
(
"//button[@class='ant-btn ant-btn-primary']"
)[
0
]
submit_button
.
click
()
engine
.
logger
.
info
(
'点击提交'
)
time
.
sleep
(
1
)
anjian_list
=
engine
.
driver
.
xpath
(
"//div[@class='ant-table-body']//tr"
)
anjian
=
anjian_list
[
0
]
engine
.
logger
.
info
(
'案件列表长度:{}'
.
format
(
len
(
anjian_list
)))
shouanhao
=
anjian
.
get_attribute
(
'data-row-key'
)
engine
.
logger
.
info
(
'部门受案号/案件名称:{}'
.
format
(
shouanhao
))
assert
shouanhao
==
bmsah
test_cases/test_jbaq.py
0 → 100644
View file @
5b5d96f4
'''
基本案情-基本情况
'''
import
pytest
,
time
from
basepage
import
get_engine
@
pytest
.
mark
.
addxyr
@
get_engine
(
__file__
,
'JBAQ_URL'
)
def
test_addxyr
(
engine
):
# engine.init()
basic_url
=
engine
.
get_testUrl
(
'JBAQ_URL'
)
case_id
=
engine
.
get_caseId
(
'caseId'
)
url
=
basic_url
.
format
(
bmsah
=
case_id
)
engine
.
driver
.
get
(
url
)
xyr_add
=
engine
.
driver
.
xpath
(
"//div[@class='plus___1ckgY']"
)
if
not
xyr_add
:
engine
.
logger
.
info
(
'没有基本信息!!查看具体情况'
)
exit
(
-
1
)
return
xyr_add
=
xyr_add
[
0
]
xyr_list
=
engine
.
driver
.
xpath
(
"//div[contains(@class,'item___2HoCU')]"
)
# 添加犯罪嫌疑人
xyr_add
.
click
()
engine
.
logger
.
info
(
'点击添加嫌疑人'
)
time
.
sleep
(
1
)
new_xyr_list
=
engine
.
driver
.
xpath
(
"//div[contains(@class,'item___2HoCU')]"
)
xyr_name
=
engine
.
driver
.
xpath
(
"//div[@title='犯罪嫌疑人姓名']/following-sibling::div[1]//input"
)[
0
]
.
get_attribute
(
'value'
)
assert
len
(
new_xyr_list
)
-
len
(
xyr_list
)
==
1
and
xyr_name
==
''
,
'嫌疑人数+1'
# 再加一个
xyr_add
.
click
()
engine
.
logger
.
info
(
'点击添加嫌疑人'
)
time
.
sleep
(
1
)
new_xyr_list
=
engine
.
driver
.
xpath
(
"//div[contains(@class,'item___2HoCU')]"
)
xyr_name
=
engine
.
driver
.
xpath
(
"//div[@title='犯罪嫌疑人姓名']/following-sibling::div[1]//input"
)[
0
]
.
get_attribute
(
'value'
)
assert
len
(
new_xyr_list
)
-
len
(
xyr_list
)
==
2
and
xyr_name
==
''
,
'嫌疑人数+2'
@
pytest
.
mark
.
delxyr
@
get_engine
(
__file__
,
'JBAQ_URL'
)
def
test_addxyr
(
engine
):
xyr_list
=
engine
.
driver
.
xpath
(
"//div[contains(@class,'item___2HoCU')]"
)
xyr_last
=
xyr_list
[
-
1
]
# 删除犯罪嫌疑人
xyr_last
.
click
()
engine
.
logger
.
info
(
'点击最后一个嫌疑人'
)
xyr_del
=
engine
.
driver
.
xpath
(
"//div[@class='item___2HoCU active___2SHXM']/a[contains(@class,'delete___3-b3m')]"
)[
0
]
xyr_del
.
click
()
engine
.
logger
.
info
(
'点击X'
)
time
.
sleep
(
0.5
)
# 点击否
xyr_del_false
=
engine
.
driver
.
xpath
(
"//div[@class='ant-popover-buttons']/button[@class='ant-btn ant-btn-sm']"
)[
0
]
xyr_del_false
.
click
()
engine
.
logger
.
info
(
'点击否'
)
time
.
sleep
(
0.5
)
new_xyr_list
=
engine
.
driver
.
xpath
(
"//div[contains(@class,'item___2HoCU')]"
)
assert
len
(
xyr_list
)
==
len
(
new_xyr_list
),
'嫌疑人数不变'
xyr_last
.
click
()
xyr_del
.
click
()
engine
.
logger
.
info
(
'点击X'
)
time
.
sleep
(
0.5
)
# 点击是
xyr_del_true
=
engine
.
driver
.
xpath
(
"//div[@class='ant-popover-buttons']/button[@class='ant-btn ant-btn-primary ant-btn-sm']"
)[
0
]
xyr_del_true
.
click
()
engine
.
logger
.
info
(
'点击是'
)
time
.
sleep
(
1
)
new_xyr_list
=
engine
.
driver
.
xpath
(
"//div[contains(@class,'item___2HoCU')]"
)
assert
len
(
xyr_list
)
-
len
(
new_xyr_list
)
==
1
,
'嫌疑人数-1'
test_cases/test_login.py
View file @
5b5d96f4
...
@@ -6,6 +6,7 @@ sys.path.append('..')
...
@@ -6,6 +6,7 @@ sys.path.append('..')
from
basepage.read_config
import
ReadConfig
from
basepage.read_config
import
ReadConfig
from
basepage.browser_engine
import
BrowserEngine
from
basepage.browser_engine
import
BrowserEngine
from
basepage.logger
import
Logger
from
basepage.logger
import
Logger
from
basepage
import
get_engine
project_name
=
"TestLogin"
project_name
=
"TestLogin"
logger
=
Logger
(
project_name
)
.
get_logger
()
logger
=
Logger
(
project_name
)
.
get_logger
()
...
@@ -18,19 +19,19 @@ def teardown_function():
...
@@ -18,19 +19,19 @@ def teardown_function():
'''
'''
@
pytest
.
mark
.
case1
@
pytest
.
mark
.
login
def
test_login
():
@
get_engine
(
__file__
,
'LOGIN'
)
conf
=
ReadConfig
()
def
test_login
(
engine
):
username
=
conf
.
get_userInfo
(
'username'
)
# engine.init()
password
=
conf
.
get_userInfo
(
'password'
)
username
=
engine
.
get_userInfo
(
'username'
)
url
=
conf
.
get_testUrl
(
'URL'
)
password
=
engine
.
get_userInfo
(
'password'
)
url
=
engine
.
get_testUrl
(
'URL'
)
print
(
username
,
password
,
url
)
print
(
username
,
password
,
url
)
logger
.
info
(
"username:
%
s"
%
username
)
logger
.
info
(
"username:
%
s"
%
username
)
logger
.
info
(
"password :
%
s"
%
password
)
logger
.
info
(
"password :
%
s"
%
password
)
logger
.
info
(
"Open url:
%
s"
%
url
)
logger
.
info
(
"Open url:
%
s"
%
url
)
browser
=
BrowserEngine
()
driver
=
engine
.
driver
driver
=
browser
.
open_browser
()
tags
=
driver
.
find_element_by_xpath
(
'//*[@id="root"]/div/div/div[2]/form/div[1]/div/div/span/span/span'
)
tags
=
driver
.
find_element_by_xpath
(
'//*[@id="root"]/div/div/div[2]/form/div[1]/div/div/span/span/span'
)
# print(tags.text)
# print(tags.text)
...
@@ -54,16 +55,5 @@ def test_login():
...
@@ -54,16 +55,5 @@ def test_login():
driver
.
quit
()
driver
.
quit
()
@
pytest
.
mark
.
case2
def
test_login2
():
browser
=
BrowserEngine
()
driver
=
browser
.
login_znfz
()
time
.
sleep
(
10
)
driver
.
quit
()
if
__name__
==
'__main__'
:
# pytest.main("D:/mywork/autotest/znfz_test1/test_cases")
# pytest.main(["-m=case1","--html=report.html"])
pytest
.
main
()
test_report/report.html
deleted
100644 → 0
View file @
dc3f9bdf
<!DOCTYPE html>
<html>
<head>
<meta
charset=
"utf-8"
/>
<title>
Test Report
</title>
<link
href=
"assets/style.css"
rel=
"stylesheet"
type=
"text/css"
/></head>
<body
onLoad=
"init()"
>
<script>
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
function
toArray
(
iter
)
{
if
(
iter
===
null
)
{
return
null
;
}
return
Array
.
prototype
.
slice
.
call
(
iter
);
}
function
find
(
selector
,
elem
)
{
if
(
!
elem
)
{
elem
=
document
;
}
return
elem
.
querySelector
(
selector
);
}
function
find_all
(
selector
,
elem
)
{
if
(
!
elem
)
{
elem
=
document
;
}
return
toArray
(
elem
.
querySelectorAll
(
selector
));
}
function
sort_column
(
elem
)
{
toggle_sort_states
(
elem
);
var
colIndex
=
toArray
(
elem
.
parentNode
.
childNodes
).
indexOf
(
elem
);
var
key
;
if
(
elem
.
classList
.
contains
(
'
numeric
'
))
{
key
=
key_num
;
}
else
if
(
elem
.
classList
.
contains
(
'
result
'
))
{
key
=
key_result
;
}
else
{
key
=
key_alpha
;
}
sort_table
(
elem
,
key
(
colIndex
));
}
function
show_all_extras
()
{
find_all
(
'
.col-result
'
).
forEach
(
show_extras
);
}
function
hide_all_extras
()
{
find_all
(
'
.col-result
'
).
forEach
(
hide_extras
);
}
function
show_extras
(
colresult_elem
)
{
var
extras
=
colresult_elem
.
parentNode
.
nextElementSibling
;
var
expandcollapse
=
colresult_elem
.
firstElementChild
;
extras
.
classList
.
remove
(
"
collapsed
"
);
expandcollapse
.
classList
.
remove
(
"
expander
"
);
expandcollapse
.
classList
.
add
(
"
collapser
"
);
}
function
hide_extras
(
colresult_elem
)
{
var
extras
=
colresult_elem
.
parentNode
.
nextElementSibling
;
var
expandcollapse
=
colresult_elem
.
firstElementChild
;
extras
.
classList
.
add
(
"
collapsed
"
);
expandcollapse
.
classList
.
remove
(
"
collapser
"
);
expandcollapse
.
classList
.
add
(
"
expander
"
);
}
function
show_filters
()
{
var
filter_items
=
document
.
getElementsByClassName
(
'
filter
'
);
for
(
var
i
=
0
;
i
<
filter_items
.
length
;
i
++
)
filter_items
[
i
].
hidden
=
false
;
}
function
add_collapse
()
{
// Add links for show/hide all
var
resulttable
=
find
(
'
table#results-table
'
);
var
showhideall
=
document
.
createElement
(
"
p
"
);
showhideall
.
innerHTML
=
'
<a href="javascript:show_all_extras()">Show all details</a> /
'
+
'
<a href="javascript:hide_all_extras()">Hide all details</a>
'
;
resulttable
.
parentElement
.
insertBefore
(
showhideall
,
resulttable
);
// Add show/hide link to each result
find_all
(
'
.col-result
'
).
forEach
(
function
(
elem
)
{
var
collapsed
=
get_query_parameter
(
'
collapsed
'
)
||
'
Passed
'
;
var
extras
=
elem
.
parentNode
.
nextElementSibling
;
var
expandcollapse
=
document
.
createElement
(
"
span
"
);
if
(
extras
.
classList
.
contains
(
"
collapsed
"
))
{
expandcollapse
.
classList
.
add
(
"
expander
"
)
}
else
if
(
collapsed
.
includes
(
elem
.
innerHTML
))
{
extras
.
classList
.
add
(
"
collapsed
"
);
expandcollapse
.
classList
.
add
(
"
expander
"
);
}
else
{
expandcollapse
.
classList
.
add
(
"
collapser
"
);
}
elem
.
appendChild
(
expandcollapse
);
elem
.
addEventListener
(
"
click
"
,
function
(
event
)
{
if
(
event
.
currentTarget
.
parentNode
.
nextElementSibling
.
classList
.
contains
(
"
collapsed
"
))
{
show_extras
(
event
.
currentTarget
);
}
else
{
hide_extras
(
event
.
currentTarget
);
}
});
})
}
function
get_query_parameter
(
name
)
{
var
match
=
RegExp
(
'
[?&]
'
+
name
+
'
=([^&]*)
'
).
exec
(
window
.
location
.
search
);
return
match
&&
decodeURIComponent
(
match
[
1
].
replace
(
/
\+
/g
,
'
'
));
}
function
init
()
{
reset_sort_headers
();
add_collapse
();
show_filters
();
sort_column
(
find
(
'
.initial-sort
'
));
find_all
(
'
.sortable
'
).
forEach
(
function
(
elem
)
{
elem
.
addEventListener
(
"
click
"
,
function
(
event
)
{
sort_column
(
elem
);
},
false
)
});
};
function
sort_table
(
clicked
,
key_func
)
{
var
rows
=
find_all
(
'
.results-table-row
'
);
var
reversed
=
!
clicked
.
classList
.
contains
(
'
asc
'
);
var
sorted_rows
=
sort
(
rows
,
key_func
,
reversed
);
/* Whole table is removed here because browsers acts much slower
* when appending existing elements.
*/
var
thead
=
document
.
getElementById
(
"
results-table-head
"
);
document
.
getElementById
(
'
results-table
'
).
remove
();
var
parent
=
document
.
createElement
(
"
table
"
);
parent
.
id
=
"
results-table
"
;
parent
.
appendChild
(
thead
);
sorted_rows
.
forEach
(
function
(
elem
)
{
parent
.
appendChild
(
elem
);
});
document
.
getElementsByTagName
(
"
BODY
"
)[
0
].
appendChild
(
parent
);
}
function
sort
(
items
,
key_func
,
reversed
)
{
var
sort_array
=
items
.
map
(
function
(
item
,
i
)
{
return
[
key_func
(
item
),
i
];
});
sort_array
.
sort
(
function
(
a
,
b
)
{
var
key_a
=
a
[
0
];
var
key_b
=
b
[
0
];
if
(
key_a
==
key_b
)
return
0
;
if
(
reversed
)
{
return
(
key_a
<
key_b
?
1
:
-
1
);
}
else
{
return
(
key_a
>
key_b
?
1
:
-
1
);
}
});
return
sort_array
.
map
(
function
(
item
)
{
var
index
=
item
[
1
];
return
items
[
index
];
});
}
function
key_alpha
(
col_index
)
{
return
function
(
elem
)
{
return
elem
.
childNodes
[
1
].
childNodes
[
col_index
].
firstChild
.
data
.
toLowerCase
();
};
}
function
key_num
(
col_index
)
{
return
function
(
elem
)
{
return
parseFloat
(
elem
.
childNodes
[
1
].
childNodes
[
col_index
].
firstChild
.
data
);
};
}
function
key_result
(
col_index
)
{
return
function
(
elem
)
{
var
strings
=
[
'
Error
'
,
'
Failed
'
,
'
Rerun
'
,
'
XFailed
'
,
'
XPassed
'
,
'
Skipped
'
,
'
Passed
'
];
return
strings
.
indexOf
(
elem
.
childNodes
[
1
].
childNodes
[
col_index
].
firstChild
.
data
);
};
}
function
reset_sort_headers
()
{
find_all
(
'
.sort-icon
'
).
forEach
(
function
(
elem
)
{
elem
.
parentNode
.
removeChild
(
elem
);
});
find_all
(
'
.sortable
'
).
forEach
(
function
(
elem
)
{
var
icon
=
document
.
createElement
(
"
div
"
);
icon
.
className
=
"
sort-icon
"
;
icon
.
textContent
=
"
vvv
"
;
elem
.
insertBefore
(
icon
,
elem
.
firstChild
);
elem
.
classList
.
remove
(
"
desc
"
,
"
active
"
);
elem
.
classList
.
add
(
"
asc
"
,
"
inactive
"
);
});
}
function
toggle_sort_states
(
elem
)
{
//if active, toggle between asc and desc
if
(
elem
.
classList
.
contains
(
'
active
'
))
{
elem
.
classList
.
toggle
(
'
asc
'
);
elem
.
classList
.
toggle
(
'
desc
'
);
}
//if inactive, reset all other functions and add ascending active
if
(
elem
.
classList
.
contains
(
'
inactive
'
))
{
reset_sort_headers
();
elem
.
classList
.
remove
(
'
inactive
'
);
elem
.
classList
.
add
(
'
active
'
);
}
}
function
is_all_rows_hidden
(
value
)
{
return
value
.
hidden
==
false
;
}
function
filter_table
(
elem
)
{
var
outcome_att
=
"
data-test-result
"
;
var
outcome
=
elem
.
getAttribute
(
outcome_att
);
class_outcome
=
outcome
+
"
results-table-row
"
;
var
outcome_rows
=
document
.
getElementsByClassName
(
class_outcome
);
for
(
var
i
=
0
;
i
<
outcome_rows
.
length
;
i
++
){
outcome_rows
[
i
].
hidden
=
!
elem
.
checked
;
}
var
rows
=
find_all
(
'
.results-table-row
'
).
filter
(
is_all_rows_hidden
);
var
all_rows_hidden
=
rows
.
length
==
0
?
true
:
false
;
var
not_found_message
=
document
.
getElementById
(
"
not-found-message
"
);
not_found_message
.
hidden
=
!
all_rows_hidden
;
}
</script>
<h1>
report.html
</h1>
<p>
Report generated on 02-Jun-2020 at 10:36:16 by
<a
href=
"https://pypi.python.org/pypi/pytest-html"
>
pytest-html
</a>
v2.1.1
</p>
<h2>
Environment
</h2>
<table
id=
"environment"
>
<tr>
<td>
Packages
</td>
<td>
{"pluggy": "0.13.1", "py": "1.8.1", "pytest": "5.4.2"}
</td></tr>
<tr>
<td>
Platform
</td>
<td>
Windows-10-10.0.18362-SP0
</td></tr>
<tr>
<td>
Plugins
</td>
<td>
{"forked": "1.1.3", "html": "2.1.1", "metadata": "1.9.0", "rerunfailures": "9.0", "xdist": "1.32.0"}
</td></tr>
<tr>
<td>
Python
</td>
<td>
3.8.2
</td></tr></table>
<h2>
Summary
</h2>
<p>
4 tests ran in 58.87 seconds.
</p>
<p
class=
"filter"
hidden=
"true"
>
(Un)check the boxes to filter the results.
</p><input
checked=
"true"
class=
"filter"
data-test-result=
"passed"
hidden=
"true"
name=
"filter_checkbox"
onChange=
"filter_table(this)"
type=
"checkbox"
/><span
class=
"passed"
>
4 passed
</span>
,
<input
checked=
"true"
class=
"filter"
data-test-result=
"skipped"
disabled=
"true"
hidden=
"true"
name=
"filter_checkbox"
onChange=
"filter_table(this)"
type=
"checkbox"
/><span
class=
"skipped"
>
0 skipped
</span>
,
<input
checked=
"true"
class=
"filter"
data-test-result=
"failed"
disabled=
"true"
hidden=
"true"
name=
"filter_checkbox"
onChange=
"filter_table(this)"
type=
"checkbox"
/><span
class=
"failed"
>
0 failed
</span>
,
<input
checked=
"true"
class=
"filter"
data-test-result=
"error"
disabled=
"true"
hidden=
"true"
name=
"filter_checkbox"
onChange=
"filter_table(this)"
type=
"checkbox"
/><span
class=
"error"
>
0 errors
</span>
,
<input
checked=
"true"
class=
"filter"
data-test-result=
"xfailed"
disabled=
"true"
hidden=
"true"
name=
"filter_checkbox"
onChange=
"filter_table(this)"
type=
"checkbox"
/><span
class=
"xfailed"
>
0 expected failures
</span>
,
<input
checked=
"true"
class=
"filter"
data-test-result=
"xpassed"
disabled=
"true"
hidden=
"true"
name=
"filter_checkbox"
onChange=
"filter_table(this)"
type=
"checkbox"
/><span
class=
"xpassed"
>
0 unexpected passes
</span>
,
<input
checked=
"true"
class=
"filter"
data-test-result=
"rerun"
disabled=
"true"
hidden=
"true"
name=
"filter_checkbox"
onChange=
"filter_table(this)"
type=
"checkbox"
/><span
class=
"rerun"
>
0 rerun
</span>
<h2>
Results
</h2>
<table
id=
"results-table"
>
<thead
id=
"results-table-head"
>
<tr>
<th
class=
"sortable result initial-sort"
col=
"result"
>
Result
</th>
<th
class=
"sortable"
col=
"name"
>
Test
</th>
<th
class=
"sortable numeric"
col=
"duration"
>
Duration
</th>
<th>
Links
</th></tr>
<tr
hidden=
"true"
id=
"not-found-message"
>
<th
colspan=
"4"
>
No results found. Try to check the filters
</th></tr></thead>
<tbody
class=
"passed results-table-row"
>
<tr>
<td
class=
"col-result"
>
Passed
</td>
<td
class=
"col-name"
>
test_login.py::test_login
</td>
<td
class=
"col-duration"
>
29.36
</td>
<td
class=
"col-links"
></td></tr>
<tr>
<td
class=
"extra"
colspan=
"4"
>
<div
class=
"log"
>
------------------------------Captured stdout call------------------------------
<br/>
周朝阳 qazwsxedc http://192.168.2.31/cm
<br/>
------------------------------Captured stderr call------------------------------
<br/>
2020-06-02 10:35:17,729 - read_config - INFO - the userInfo : 周朝阳
2020-06-02 10:35:17,729 - read_config - INFO - the userInfo : qazwsxedc
2020-06-02 10:35:17,729 - read_config - INFO - the testUrl : http://192.168.2.31/cm
2020-06-02 10:35:17,729 - testLogin - INFO - username: 周朝阳
2020-06-02 10:35:17,729 - testLogin - INFO - password :qazwsxedc
2020-06-02 10:35:17,729 - testLogin - INFO - Open url: http://192.168.2.31/cm
2020-06-02 10:35:17,729 - read_config - INFO - the browserType : Chrome
2020-06-02 10:35:17,744 - read_config - INFO - the testUrl : http://192.168.2.31/cm
2020-06-02 10:35:17,744 - browser_engine - INFO - browserName: Chrome
2020-06-02 10:35:24,667 - browser_engine - INFO - Open url: http://192.168.2.31/cm
2020-06-02 10:35:31,968 - browser_engine - INFO - Maximize the current window.
2020-06-02 10:35:31,971 - browser_engine - INFO - Set implicitly wait 10 seconds.
2020-06-02 10:35:32,010 - testLogin - INFO - tags.text;请选择所属部门
2020-06-02 10:35:33,295 - testLogin - INFO - tags2.text:瓯海区院
<br/>
-------------------------------Captured log call--------------------------------
<br/>
[32mINFO [0m read_config:read_config.py:35 the userInfo : 周朝阳
[32mINFO [0m read_config:read_config.py:35 the userInfo : qazwsxedc
[32mINFO [0m read_config:read_config.py:30 the testUrl : http://192.168.2.31/cm
[32mINFO [0m testLogin:test_login.py:27 username: 周朝阳
[32mINFO [0m testLogin:test_login.py:28 password :qazwsxedc
[32mINFO [0m testLogin:test_login.py:29 Open url: http://192.168.2.31/cm
[32mINFO [0m read_config:read_config.py:25 the browserType : Chrome
[32mINFO [0m read_config:read_config.py:30 the testUrl : http://192.168.2.31/cm
[32mINFO [0m browser_engine:browser_engine.py:17 browserName: Chrome
[32mINFO [0m browser_engine:browser_engine.py:23 Open url: http://192.168.2.31/cm
[32mINFO [0m browser_engine:browser_engine.py:26 Maximize the current window.
[32mINFO [0m browser_engine:browser_engine.py:28 Set implicitly wait 10 seconds.
[32mINFO [0m testLogin:test_login.py:36 tags.text;请选择所属部门
[32mINFO [0m testLogin:test_login.py:44 tags2.text:瓯海区院
<br/></div></td></tr></tbody>
<tbody
class=
"passed results-table-row"
>
<tr>
<td
class=
"col-result"
>
Passed
</td>
<td
class=
"col-name"
>
test_login.py::test_login1
</td>
<td
class=
"col-duration"
>
0.00
</td>
<td
class=
"col-links"
></td></tr>
<tr>
<td
class=
"extra"
colspan=
"4"
>
<div
class=
"log"
>
------------------------------Captured stdout call------------------------------
<br/>
Chrome 周朝阳 qazwsxedc
<br/>
------------------------------Captured stderr call------------------------------
<br/>
2020-06-02 10:35:47,096 - read_config - INFO - the browserType : Chrome
2020-06-02 10:35:47,096 - read_config - INFO - the userInfo : 周朝阳
2020-06-02 10:35:47,096 - read_config - INFO - the userInfo : qazwsxedc
<br/>
-------------------------------Captured log call--------------------------------
<br/>
[32mINFO [0m read_config:read_config.py:25 the browserType : Chrome
[32mINFO [0m read_config:read_config.py:35 the userInfo : 周朝阳
[32mINFO [0m read_config:read_config.py:35 the userInfo : qazwsxedc
<br/></div></td></tr></tbody>
<tbody
class=
"passed results-table-row"
>
<tr>
<td
class=
"col-result"
>
Passed
</td>
<td
class=
"col-name"
>
test_login.py::test_login2
</td>
<td
class=
"col-duration"
>
29.21
</td>
<td
class=
"col-links"
></td></tr>
<tr>
<td
class=
"extra"
colspan=
"4"
>
<div
class=
"log"
>
------------------------------Captured stdout call------------------------------
<br/>
周朝阳 qazwsxedc http://192.168.2.31/cm
<br/>
------------------------------Captured stderr call------------------------------
<br/>
2020-06-02 10:35:47,107 - read_config - INFO - the userInfo : 周朝阳
2020-06-02 10:35:47,107 - read_config - INFO - the userInfo : qazwsxedc
2020-06-02 10:35:47,108 - read_config - INFO - the testUrl : http://192.168.2.31/cm
2020-06-02 10:35:47,108 - browser_engine - INFO - username: 周朝阳
2020-06-02 10:35:47,115 - read_config - INFO - the browserType : Chrome
2020-06-02 10:35:47,115 - read_config - INFO - the testUrl : http://192.168.2.31/cm
2020-06-02 10:35:47,115 - browser_engine - INFO - browserName: Chrome
2020-06-02 10:35:54,000 - browser_engine - INFO - Open url: http://192.168.2.31/cm
2020-06-02 10:36:01,166 - browser_engine - INFO - Maximize the current window.
2020-06-02 10:36:01,166 - browser_engine - INFO - Set implicitly wait 10 seconds.
2020-06-02 10:36:01,220 - browser_engine - INFO - tags.text;请选择所属部门
2020-06-02 10:36:02,563 - browser_engine - INFO - tags2.text;瓯海区院
<br/>
-------------------------------Captured log call--------------------------------
<br/>
[32mINFO [0m read_config:read_config.py:35 the userInfo : 周朝阳
[32mINFO [0m read_config:read_config.py:35 the userInfo : qazwsxedc
[32mINFO [0m read_config:read_config.py:30 the testUrl : http://192.168.2.31/cm
[32mINFO [0m browser_engine:browser_engine.py:39 username: 周朝阳
[32mINFO [0m read_config:read_config.py:25 the browserType : Chrome
[32mINFO [0m read_config:read_config.py:30 the testUrl : http://192.168.2.31/cm
[32mINFO [0m browser_engine:browser_engine.py:17 browserName: Chrome
[32mINFO [0m browser_engine:browser_engine.py:23 Open url: http://192.168.2.31/cm
[32mINFO [0m browser_engine:browser_engine.py:26 Maximize the current window.
[32mINFO [0m browser_engine:browser_engine.py:28 Set implicitly wait 10 seconds.
[32mINFO [0m browser_engine:browser_engine.py:49 tags.text;请选择所属部门
[32mINFO [0m browser_engine:browser_engine.py:57 tags2.text;瓯海区院
<br/></div></td></tr></tbody>
<tbody
class=
"passed results-table-row"
>
<tr>
<td
class=
"col-result"
>
Passed
</td>
<td
class=
"col-name"
>
test_main.py::test_file2_answer1
</td>
<td
class=
"col-duration"
>
0.00
</td>
<td
class=
"col-links"
></td></tr>
<tr>
<td
class=
"extra"
colspan=
"4"
>
<div
class=
"empty log"
>
No log output captured.
</div></td></tr></tbody></table></body></html>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment