Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
A
auto-test
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
收起侧边栏
Close sidebar
动态
分支图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
yuan.luo
auto-test
提交
bcaca0dc
提交
bcaca0dc
编写于
6月 21, 2019
作者:
yuan.luo
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
bug fixed
上级
515b0551
变更
7
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
15 行增加
和
240 行删除
+15
-240
login.py
functions/login.py
+9
-4
register.py
functions/register.py
+0
-0
Root.py
main/Root.py
+2
-2
mainLogin.png
mainLogin.png
+0
-0
2019-06-20-10-30-35-result.html
reports/2019-06-20-10-30-35-result.html
+0
-220
config.py
util/config.py
+4
-14
tools.py
util/tools.py
+0
-0
未找到文件。
functions/login.py
浏览文件 @
bcaca0dc
import
time
import
time
import
os
from
unittest
import
TestCase
from
appium
import
webdriver
from
util
import
config
from
util.tools
import
set_file_path
from
util.config
import
BasicCase
class
Login
(
TestCase
):
def
setUp
(
self
):
self
.
driver
=
webdriver
.
Remote
(
config
.
host
,
config
.
get_caps
())
class
Login
(
BasicCase
):
def
tearDown
(
self
):
def
tearDown
(
self
):
pass
pass
...
@@ -21,7 +26,7 @@ class Login(BasicCase):
...
@@ -21,7 +26,7 @@ class Login(BasicCase):
time
.
sleep
(
1
)
time
.
sleep
(
1
)
self
.
driver
.
find_element_by_id
(
"btn_user_login"
)
.
click
()
self
.
driver
.
find_element_by_id
(
"btn_user_login"
)
.
click
()
filename
=
os
.
getcwd
(
)
+
'Login.png'
filename
=
set_file_path
(
'images/'
)
+
'Login.png'
self
.
driver
.
save_screenshot
(
filename
)
self
.
driver
.
save_screenshot
(
filename
)
except
Exception
as
e
:
except
Exception
as
e
:
print
(
e
)
print
(
e
)
functions/
R
egister.py
→
functions/
r
egister.py
浏览文件 @
bcaca0dc
文件已移动
main/Root.py
浏览文件 @
bcaca0dc
...
@@ -2,12 +2,12 @@ import unittest
...
@@ -2,12 +2,12 @@ import unittest
import
time
import
time
import
HTMLTestRunner
import
HTMLTestRunner
from
functions.login
import
Login
from
functions.login
import
Login
from
util.
T
ools
import
set_file_path
from
util.
t
ools
import
set_file_path
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
suite
=
unittest
.
TestSuite
()
suite
=
unittest
.
TestSuite
()
suite
.
addTest
(
Login
(
"test_login"
))
suite
.
addTest
(
Login
(
"test_login"
))
filename
=
set_file_path
(
'reports/'
)
+
time
.
strftime
(
"
%
Y
-
%
m-
%
d-
%
H-
%
M-
%
S"
,
time
.
gmtime
())
+
'-
result.html'
filename
=
set_file_path
(
'reports/'
)
+
time
.
strftime
(
"
%
Y
_
%
m_
%
d_
%
H_
%
M_
%
S"
,
time
.
gmtime
())
+
'_
result.html'
fp
=
open
(
filename
,
'wb'
)
fp
=
open
(
filename
,
'wb'
)
runner
=
HTMLTestRunner
.
HTMLTestRunner
(
stream
=
fp
,
title
=
'测试报告'
,
description
=
'用例执行情况:'
)
runner
=
HTMLTestRunner
.
HTMLTestRunner
(
stream
=
fp
,
title
=
'测试报告'
,
description
=
'用例执行情况:'
)
runner
.
run
(
suite
)
runner
.
run
(
suite
)
...
...
mainLogin.png
已删除
100644 → 0
浏览文件 @
515b0551
100.3 KB
reports/2019-06-20-10-30-35-result.html
已删除
100644 → 0
浏览文件 @
515b0551
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns=
"http://www.w3.org/1999/xhtml"
>
<head>
<title>
测试报告
</title>
<meta
name=
"generator"
content=
"HTMLTestRunner 0.8.2.2"
/>
<meta
http-equiv=
"Content-Type"
content=
"text/html; charset=UTF-8"
/>
<link
href=
"http://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css"
rel=
"stylesheet"
>
<script
src=
"http://libs.baidu.com/jquery/2.0.0/jquery.min.js"
></script>
<script
src=
"http://libs.baidu.com/bootstrap/3.0.3/js/bootstrap.min.js"
></script>
<style
type=
"text/css"
media=
"screen"
>
body
{
font-family
:
Microsoft
YaHei
,
Tahoma
,
arial
,
helvetica
,
sans-serif
;
padding
:
20px
;
font-size
:
80%
;
}
table
{
font-size
:
100%
;
}
/* -- heading ---------------------------------------------------------------------- */
.heading
{
margin-top
:
0ex
;
margin-bottom
:
1ex
;
}
.heading
.description
{
margin-top
:
4ex
;
margin-bottom
:
6ex
;
}
/* -- report ------------------------------------------------------------------------ */
#total_row
{
font-weight
:
bold
;
}
.passCase
{
color
:
#5cb85c
;
}
.failCase
{
color
:
#d9534f
;
font-weight
:
bold
;
}
.errorCase
{
color
:
#f0ad4e
;
font-weight
:
bold
;
}
.hiddenRow
{
display
:
none
;
}
.testcase
{
margin-left
:
2em
;
}
</style>
</head>
<body
>
<script
language=
"javascript"
type=
"text/javascript"
>
output_list
=
Array
();
/*level 调整增加只显示通过用例的分类 --Findyou
0:Summary //all hiddenRow
1:Failed //pt hiddenRow, ft none
2:Pass //pt none, ft hiddenRow
3:All //pt none, ft none
*/
function
showCase
(
level
)
{
trs
=
document
.
getElementsByTagName
(
"tr"
);
for
(
var
i
=
0
;
i
<
trs
.
length
;
i
++
)
{
tr
=
trs
[
i
];
id
=
tr
.
id
;
if
(
id
.
substr
(
0
,
2
)
==
'ft'
)
{
if
(
level
==
2
||
level
==
0
)
{
tr
.
className
=
'hiddenRow'
;
}
else
{
tr
.
className
=
''
;
}
}
if
(
id
.
substr
(
0
,
2
)
==
'pt'
)
{
if
(
level
<
2
)
{
tr
.
className
=
'hiddenRow'
;
}
else
{
tr
.
className
=
''
;
}
}
}
//加入【详细】切换文字变化 --Findyou
detail_class
=
document
.
getElementsByClassName
(
'detail'
);
//console.log(detail_class.length)
if
(
level
==
3
)
{
for
(
var
i
=
0
;
i
<
detail_class
.
length
;
i
++
){
detail_class
[
i
].
innerHTML
=
"收起"
}
}
else
{
for
(
var
i
=
0
;
i
<
detail_class
.
length
;
i
++
){
detail_class
[
i
].
innerHTML
=
"详细"
}
}
}
function
showClassDetail
(
cid
,
count
)
{
var
id_list
=
Array
(
count
);
var
toHide
=
1
;
for
(
var
i
=
0
;
i
<
count
;
i
++
)
{
//ID修改 点 为 下划线 -Findyou
tid0
=
't'
+
cid
.
substr
(
1
)
+
'_'
+
(
i
+
1
);
tid
=
'f'
+
tid0
;
tr
=
document
.
getElementById
(
tid
);
if
(
!
tr
)
{
tid
=
'p'
+
tid0
;
tr
=
document
.
getElementById
(
tid
);
}
id_list
[
i
]
=
tid
;
if
(
tr
.
className
)
{
toHide
=
0
;
}
}
for
(
var
i
=
0
;
i
<
count
;
i
++
)
{
tid
=
id_list
[
i
];
//修改点击无法收起的BUG,加入【详细】切换文字变化 --Findyou
if
(
toHide
)
{
document
.
getElementById
(
tid
).
className
=
'hiddenRow'
;
document
.
getElementById
(
cid
).
innerText
=
"详细"
}
else
{
document
.
getElementById
(
tid
).
className
=
''
;
document
.
getElementById
(
cid
).
innerText
=
"收起"
}
}
}
function
html_escape
(
s
)
{
s
=
s
.
replace
(
/&/g
,
'&'
);
s
=
s
.
replace
(
/</g
,
'<'
);
s
=
s
.
replace
(
/>/g
,
'>'
);
return
s
;
}
</script>
<div
class=
'heading'
>
<h1
style=
"font-family: Microsoft YaHei"
>
测试报告
</h1>
<p
class=
'attribute'
><strong>
测试人员 :
</strong>
最棒QA
</p>
<p
class=
'attribute'
><strong>
开始时间 :
</strong>
2019-06-20 18:30:35
</p>
<p
class=
'attribute'
><strong>
合计耗时 :
</strong>
0:00:00.002306
</p>
<p
class=
'attribute'
><strong>
测试结果 :
</strong>
共 1,错误 1,通过率= 0.00%
</p>
<p
class=
'description'
>
用例执行情况:
</p>
</div>
<p
id=
'show_detail_line'
>
<a
class=
"btn btn-primary"
href=
'javascript:showCase(0)'
>
概要{ 0.00% }
</a>
<a
class=
"btn btn-danger"
href=
'javascript:showCase(1)'
>
失败{ 0 }
</a>
<a
class=
"btn btn-success"
href=
'javascript:showCase(2)'
>
通过{ 0 }
</a>
<a
class=
"btn btn-info"
href=
'javascript:showCase(3)'
>
所有{ 1 }
</a>
</p>
<table
id=
'result_table'
class=
"table table-condensed table-bordered table-hover"
>
<colgroup>
<col
align=
'left'
/>
<col
align=
'right'
/>
<col
align=
'right'
/>
<col
align=
'right'
/>
<col
align=
'right'
/>
<col
align=
'right'
/>
</colgroup>
<tr
id=
'header_row'
class=
"text-center success"
style=
"font-weight: bold;font-size: 14px;"
>
<td>
用例集/测试用例
</td>
<td>
总计
</td>
<td>
通过
</td>
<td>
失败
</td>
<td>
错误
</td>
<td>
详细
</td>
</tr>
<tr
class=
'errorClass warning'
>
<td>
functions.login.Login
</td>
<td
class=
"text-center"
>
1
</td>
<td
class=
"text-center"
>
0
</td>
<td
class=
"text-center"
>
0
</td>
<td
class=
"text-center"
>
1
</td>
<td
class=
"text-center"
><a
href=
"javascript:showClassDetail('c1',1)"
class=
"detail"
id=
'c1'
>
详细
</a></td>
</tr>
<tr
id=
'ft1_1'
class=
'none'
>
<td
class=
'errorCase'
><div
class=
'testcase'
>
test_login
</div></td>
<td
colspan=
'5'
align=
'center'
>
<!--默认收起错误信息 -Findyou
<button id='btn_ft1_1' type="button" class="btn btn-danger btn-xs collapsed" data-toggle="collapse" data-target='#div_ft1_1'>错误</button>
<div id='div_ft1_1' class="collapse"> -->
<!-- 默认展开错误信息 -Findyou -->
<button
id=
'btn_ft1_1'
type=
"button"
class=
"btn btn-danger btn-xs"
data-toggle=
"collapse"
data-target=
'#div_ft1_1'
>
错误
</button>
<div
id=
'div_ft1_1'
class=
"collapse in"
>
<pre>
ft1_1: Traceback (most recent call last):
File "/Users/pingzhang/Downloads/study/auto-test/util/config.py", line 24, in setUp
self.driver = webdriver.Remote(get_caps('6.0.1'), host)
File "/usr/local/lib/python3.7/site-packages/appium/webdriver/webdriver.py", line 139, in __init__
AppiumConnection(command_executor, keep_alive=keep_alive),
File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/remote_connection.py", line 109, in __init__
parsed_url = parse.urlparse(remote_server_addr)
File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/parse.py", line 367, in urlparse
url, scheme, _coerce_result = _coerce_args(url, scheme)
File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/parse.py", line 123, in _coerce_args
return _decode_args(args) + (_encode_result,)
File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/parse.py", line 107, in _decode_args
return tuple(x.decode(encoding, errors) if x else '' for x in args)
File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/parse.py", line 107, in
<
genexpr
>
return tuple(x.decode(encoding, errors) if x else '' for x in args)
AttributeError: 'dict' object has no attribute 'decode'
</pre>
</div>
</td>
</tr>
<tr
id=
'total_row'
class=
"text-center active"
>
<td>
总计
</td>
<td>
1
</td>
<td>
0
</td>
<td>
0
</td>
<td>
1
</td>
<td>
通过率:0.00%
</td>
</tr>
</table>
<div
id=
'ending'
>
</div>
<div
style=
" position:fixed;right:50px; bottom:30px; width:20px; height:20px;cursor:pointer"
>
<a
href=
"#"
><span
class=
"glyphicon glyphicon-eject"
style =
"font-size:30px;"
aria-hidden=
"true"
>
</span></a></div>
</body>
</html>
util/config.py
浏览文件 @
bcaca0dc
from
unittest
import
TestCase
from
appium
import
webdriver
host
=
"http://localhost:4723/wd/hub"
host
=
"http://localhost:4723/wd/hub"
def
get_caps
(
version
=
'8.0.0'
):
def
get_caps
(
version
=
"8.0.0"
):
caps
=
{}
caps
=
{}
caps
[
"platformName"
]
=
"Android"
caps
[
"platformName"
]
=
"Android"
caps
[
"platformVersion"
]
=
version
caps
[
"platformVersion"
]
=
version
caps
[
"deviceName"
]
=
"
PACM0
0"
caps
[
"deviceName"
]
=
"
SM-G955
0"
caps
[
"appPackage"
]
=
"com.picahealth.yunque"
caps
[
"appPackage"
]
=
"com.picahealth.yunque"
caps
[
"appActivity"
]
=
".activitys.mainpage.InitWelcomeActivityVideo"
caps
[
"appActivity"
]
=
".activitys.mainpage.InitWelcomeActivityVideo"
return
caps
return
caps
class
BasicCase
(
TestCase
):
"""
def __init__(self):
super().__init__(BasicCase)
self.driver = webdriver.Remote(get_caps(), host)
"""
def
setUp
(
self
):
self
.
driver
=
webdriver
.
Remote
(
get_caps
(
'6.0.1'
),
host
)
util/
T
ools.py
→
util/
t
ools.py
浏览文件 @
bcaca0dc
文件已移动
写
预览
Markdown
格式
0%
请重试
or
附加一个文件
附加文件
取消
您添加了
0
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录