├── ios
├── __init__.py
├── module
│ ├── __init__.py
│ ├── base.pyc
│ ├── home.pyc
│ ├── __init__.pyc
│ ├── base.py
│ ├── home.py
│ └── login.py
├── testcase
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── test_home.py
│ └── test_login.py
└── __init__.pyc
├── tools
├── __init__.py
├── loggers.pyc
├── __init__.pyc
└── loggers.py
├── android
├── __init__.py
├── module
│ ├── find.py
│ ├── mine.py
│ ├── __init__.py
│ ├── base.pyc
│ ├── __init__.pyc
│ ├── news.py
│ ├── push.py
│ ├── login.py
│ ├── home.py
│ └── base.py
├── testcase
│ ├── __init__.py
│ ├── test_news.py
│ ├── test_login.py
│ ├── test_find.py
│ ├── test_push.py
│ ├── test_home.py
│ └── logs
│ │ └── system.log
└── __init__.pyc
├── myreport
├── data
│ ├── categories.csv
│ ├── attachments
│ │ ├── aa5d69676c97f51.txt
│ │ └── a1afe3d22dcb0c69.txt
│ ├── categories.json
│ ├── suites.csv
│ ├── behaviors.csv
│ ├── suites.json
│ ├── packages.json
│ ├── timeline.json
│ ├── behaviors.json
│ └── test-cases
│ │ └── 531c86dbca320b6.json
├── widgets
│ ├── launch.json
│ ├── environment.json
│ ├── executors.json
│ ├── categories.json
│ ├── categories-trend.json
│ ├── duration-trend.json
│ ├── retry-trend.json
│ ├── duration.json
│ ├── severity.json
│ ├── status-chart.json
│ ├── suites.json
│ ├── history-trend.json
│ ├── summary.json
│ └── behaviors.json
├── favicon.ico
├── history
│ ├── categories-trend.json
│ ├── duration-trend.json
│ ├── retry-trend.json
│ ├── history-trend.json
│ └── history.json
├── export
│ ├── mail.html
│ ├── prometheusData.txt
│ └── influxDbData.txt
├── plugins
│ ├── screen-diff
│ │ ├── styles.css
│ │ └── index.js
│ ├── packages
│ │ └── index.js
│ └── behaviors
│ │ └── index.js
└── index.html
├── config.pyc
├── driver.pyc
├── 失败截图.jpeg
├── 查看元素.png
├── 测试汇总.png
├── 测试进度.png
├── keyconfig.pyc
├── __pycache__
└── conftest.cpython-27-PYTEST.pyc
├── provide
└── push.item.json
├── .idea
├── encodings.xml
├── codeStyles
│ ├── codeStyleConfig.xml
│ └── Project.xml
├── modules.xml
├── misc.xml
├── atxdemo.iml
├── inspectionProfiles
│ └── Project_Default.xml
└── workspace.xml
├── .gitignore
├── yielddemo.py
├── config.py
├── run.py
├── README.MD
├── driver.py
├── failures
├── logs
├── system.log.2018-12-09
└── system.log
└── conftest.py
/ios/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/tools/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/android/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/android/module/find.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/android/module/mine.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/ios/module/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/android/module/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/android/testcase/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/ios/testcase/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/myreport/data/categories.csv:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/myreport/widgets/launch.json:
--------------------------------------------------------------------------------
1 | [ ]
--------------------------------------------------------------------------------
/myreport/widgets/environment.json:
--------------------------------------------------------------------------------
1 | [ ]
--------------------------------------------------------------------------------
/myreport/widgets/executors.json:
--------------------------------------------------------------------------------
1 | [ ]
--------------------------------------------------------------------------------
/config.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xinxi1990/atxdemo/HEAD/config.pyc
--------------------------------------------------------------------------------
/driver.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xinxi1990/atxdemo/HEAD/driver.pyc
--------------------------------------------------------------------------------
/失败截图.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xinxi1990/atxdemo/HEAD/失败截图.jpeg
--------------------------------------------------------------------------------
/查看元素.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xinxi1990/atxdemo/HEAD/查看元素.png
--------------------------------------------------------------------------------
/测试汇总.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xinxi1990/atxdemo/HEAD/测试汇总.png
--------------------------------------------------------------------------------
/测试进度.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xinxi1990/atxdemo/HEAD/测试进度.png
--------------------------------------------------------------------------------
/myreport/widgets/categories.json:
--------------------------------------------------------------------------------
1 | {
2 | "total" : 0,
3 | "items" : [ ]
4 | }
--------------------------------------------------------------------------------
/keyconfig.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xinxi1990/atxdemo/HEAD/keyconfig.pyc
--------------------------------------------------------------------------------
/ios/__init__.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xinxi1990/atxdemo/HEAD/ios/__init__.pyc
--------------------------------------------------------------------------------
/tools/loggers.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xinxi1990/atxdemo/HEAD/tools/loggers.pyc
--------------------------------------------------------------------------------
/android/__init__.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xinxi1990/atxdemo/HEAD/android/__init__.pyc
--------------------------------------------------------------------------------
/ios/module/base.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xinxi1990/atxdemo/HEAD/ios/module/base.pyc
--------------------------------------------------------------------------------
/ios/module/home.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xinxi1990/atxdemo/HEAD/ios/module/home.pyc
--------------------------------------------------------------------------------
/myreport/data/attachments/aa5d69676c97f51.txt:
--------------------------------------------------------------------------------
1 | test_find.py 32 INFO 测试发现
--------------------------------------------------------------------------------
/myreport/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xinxi1990/atxdemo/HEAD/myreport/favicon.ico
--------------------------------------------------------------------------------
/tools/__init__.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xinxi1990/atxdemo/HEAD/tools/__init__.pyc
--------------------------------------------------------------------------------
/android/module/base.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xinxi1990/atxdemo/HEAD/android/module/base.pyc
--------------------------------------------------------------------------------
/ios/module/__init__.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xinxi1990/atxdemo/HEAD/ios/module/__init__.pyc
--------------------------------------------------------------------------------
/ios/testcase/__init__.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xinxi1990/atxdemo/HEAD/ios/testcase/__init__.pyc
--------------------------------------------------------------------------------
/android/module/__init__.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xinxi1990/atxdemo/HEAD/android/module/__init__.pyc
--------------------------------------------------------------------------------
/myreport/history/categories-trend.json:
--------------------------------------------------------------------------------
1 | [ {
2 | "data" : { }
3 | }, {
4 | "data" : {
5 | "Product defects" : 2
6 | }
7 | } ]
--------------------------------------------------------------------------------
/myreport/widgets/categories-trend.json:
--------------------------------------------------------------------------------
1 | [ {
2 | "data" : { }
3 | }, {
4 | "data" : {
5 | "Product defects" : 2
6 | }
7 | } ]
--------------------------------------------------------------------------------
/__pycache__/conftest.cpython-27-PYTEST.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xinxi1990/atxdemo/HEAD/__pycache__/conftest.cpython-27-PYTEST.pyc
--------------------------------------------------------------------------------
/myreport/data/categories.json:
--------------------------------------------------------------------------------
1 | {
2 | "uid" : "4b4757e66a1912dae1a509f688f20b0f",
3 | "name" : "categories",
4 | "children" : [ ]
5 | }
--------------------------------------------------------------------------------
/myreport/data/suites.csv:
--------------------------------------------------------------------------------
1 | "Status","Name","Duration in ms","Description"
2 | "passed","testcase.test_find.TestFind.test_find","13057",""
3 |
--------------------------------------------------------------------------------
/myreport/history/duration-trend.json:
--------------------------------------------------------------------------------
1 | [ {
2 | "data" : {
3 | "duration" : 13057
4 | }
5 | }, {
6 | "data" : {
7 | "duration" : 266774
8 | }
9 | } ]
--------------------------------------------------------------------------------
/myreport/widgets/duration-trend.json:
--------------------------------------------------------------------------------
1 | [ {
2 | "data" : {
3 | "duration" : 13057
4 | }
5 | }, {
6 | "data" : {
7 | "duration" : 266774
8 | }
9 | } ]
--------------------------------------------------------------------------------
/provide/push.item.json:
--------------------------------------------------------------------------------
1 | [
2 | {"item":"房产"},
3 | {"item":"二手车"},
4 | {"item":"本地服务"},
5 | {"item":"装修建材"},
6 | {"item":"汽车服务"},
7 | {"item":"家政服务"}
8 | ]
--------------------------------------------------------------------------------
/myreport/data/behaviors.csv:
--------------------------------------------------------------------------------
1 | "Epic","Feature","Story","FAILED","BROKEN","PASSED","SKIPPED","UNKNOWN"
2 | "","初始化类","测试发现","0","0","1","0","0"
3 | "","测试发现","测试发现","0","0","1","0","0"
4 |
--------------------------------------------------------------------------------
/myreport/history/retry-trend.json:
--------------------------------------------------------------------------------
1 | [ {
2 | "data" : {
3 | "run" : 1,
4 | "retry" : 0
5 | }
6 | }, {
7 | "data" : {
8 | "run" : 14,
9 | "retry" : 0
10 | }
11 | } ]
--------------------------------------------------------------------------------
/myreport/widgets/retry-trend.json:
--------------------------------------------------------------------------------
1 | [ {
2 | "data" : {
3 | "run" : 1,
4 | "retry" : 0
5 | }
6 | }, {
7 | "data" : {
8 | "run" : 14,
9 | "retry" : 0
10 | }
11 | } ]
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/codeStyles/codeStyleConfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.pyc
4 | keyconfig.py
5 | .pytest_cache
6 | logs/*
7 | .idea/*
8 | data/*
9 | reports/*
10 | screenshot/*
11 | myreportt/*
12 |
--------------------------------------------------------------------------------
/myreport/export/mail.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Allure Report summary mail
6 |
7 |
8 | Mail body
9 |
10 |
11 |
--------------------------------------------------------------------------------
/yielddemo.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | def yt():
5 | print "第一次打印"
6 | yield 0
7 | print("第二次打印")
8 |
9 | if __name__ == '__main__':
10 | a = yt()
11 | print next(a)
12 | print next(a)
13 |
--------------------------------------------------------------------------------
/.idea/codeStyles/Project.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/myreport/widgets/duration.json:
--------------------------------------------------------------------------------
1 | [ {
2 | "uid" : "531c86dbca320b6",
3 | "name" : "test_find.TestFind.test_find",
4 | "time" : {
5 | "start" : 1544459544236,
6 | "stop" : 1544459557293,
7 | "duration" : 13057
8 | },
9 | "status" : "passed",
10 | "severity" : "normal"
11 | } ]
--------------------------------------------------------------------------------
/myreport/widgets/severity.json:
--------------------------------------------------------------------------------
1 | [ {
2 | "uid" : "531c86dbca320b6",
3 | "name" : "test_find.TestFind.test_find",
4 | "time" : {
5 | "start" : 1544459544236,
6 | "stop" : 1544459557293,
7 | "duration" : 13057
8 | },
9 | "status" : "passed",
10 | "severity" : "normal"
11 | } ]
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/myreport/widgets/status-chart.json:
--------------------------------------------------------------------------------
1 | [ {
2 | "uid" : "531c86dbca320b6",
3 | "name" : "test_find.TestFind.test_find",
4 | "time" : {
5 | "start" : 1544459544236,
6 | "stop" : 1544459557293,
7 | "duration" : 13057
8 | },
9 | "status" : "passed",
10 | "severity" : "normal"
11 | } ]
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/myreport/widgets/suites.json:
--------------------------------------------------------------------------------
1 | {
2 | "total" : 1,
3 | "items" : [ {
4 | "uid" : "7d3977dcbf31acd3e26ecbe96342e45e",
5 | "name" : "testcase",
6 | "statistic" : {
7 | "failed" : 0,
8 | "broken" : 0,
9 | "skipped" : 0,
10 | "passed" : 1,
11 | "unknown" : 0,
12 | "total" : 1
13 | }
14 | } ]
15 | }
--------------------------------------------------------------------------------
/myreport/data/attachments/a1afe3d22dcb0c69.txt:
--------------------------------------------------------------------------------
1 | conftest.py 27 INFO 自动化测试开始!
2 | driver.py 24 INFO a3f8ca3a
3 | driver.py 33 INFO 连接设备:a3f8ca3a
4 | conftest.py 29 INFO driver初始化
5 | base.py 53 INFO 点击元素:发现
6 | test_find.py 26 INFO 初始化首页模块
--------------------------------------------------------------------------------
/myreport/export/prometheusData.txt:
--------------------------------------------------------------------------------
1 | launch_status_failed 0
2 | launch_status_broken 0
3 | launch_status_passed 1
4 | launch_status_skipped 0
5 | launch_status_unknown 0
6 | launch_time_duration 13057
7 | launch_time_min_duration 13057
8 | launch_time_max_duration 13057
9 | launch_time_sum_duration 13057
10 | launch_retries_retries 0
11 | launch_retries_run 1
12 |
--------------------------------------------------------------------------------
/myreport/history/history-trend.json:
--------------------------------------------------------------------------------
1 | [ {
2 | "data" : {
3 | "failed" : 0,
4 | "broken" : 0,
5 | "skipped" : 0,
6 | "passed" : 1,
7 | "unknown" : 0,
8 | "total" : 1
9 | }
10 | }, {
11 | "data" : {
12 | "failed" : 2,
13 | "broken" : 0,
14 | "skipped" : 0,
15 | "passed" : 12,
16 | "unknown" : 0,
17 | "total" : 14
18 | }
19 | } ]
--------------------------------------------------------------------------------
/myreport/widgets/history-trend.json:
--------------------------------------------------------------------------------
1 | [ {
2 | "data" : {
3 | "failed" : 0,
4 | "broken" : 0,
5 | "skipped" : 0,
6 | "passed" : 1,
7 | "unknown" : 0,
8 | "total" : 1
9 | }
10 | }, {
11 | "data" : {
12 | "failed" : 2,
13 | "broken" : 0,
14 | "skipped" : 0,
15 | "passed" : 12,
16 | "unknown" : 0,
17 | "total" : 14
18 | }
19 | } ]
--------------------------------------------------------------------------------
/myreport/widgets/summary.json:
--------------------------------------------------------------------------------
1 | {
2 | "reportName" : "Allure Report",
3 | "testRuns" : [ ],
4 | "statistic" : {
5 | "failed" : 0,
6 | "broken" : 0,
7 | "skipped" : 0,
8 | "passed" : 1,
9 | "unknown" : 0,
10 | "total" : 1
11 | },
12 | "time" : {
13 | "start" : 1544459544236,
14 | "stop" : 1544459557293,
15 | "duration" : 13057,
16 | "minDuration" : 13057,
17 | "maxDuration" : 13057,
18 | "sumDuration" : 13057
19 | }
20 | }
--------------------------------------------------------------------------------
/.idea/atxdemo.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/android/module/news.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | """
5 | @Author : xinxi
6 | @Time : 2018/12/5 18:34
7 | @describe: 消息中心
8 | """
9 | import pytest,os,subprocess
10 | from base import Base
11 | from tools.loggers import JFMlogging
12 | logger = JFMlogging().getloger()
13 |
14 |
15 | good_jobs = "精选活动"
16 |
17 | class News(Base):
18 | def __init__(self, driver):
19 | self.base = Base(driver)
20 |
21 | def news_good(self):
22 | self.base.click(good_jobs,good_jobs)
23 |
--------------------------------------------------------------------------------
/myreport/plugins/screen-diff/styles.css:
--------------------------------------------------------------------------------
1 | .screen-diff__switchers {
2 | margin-bottom: 1em;
3 | }
4 |
5 | .screen-diff__switchers label + label {
6 | margin-left: 1em;
7 | }
8 |
9 | .screen-diff__overlay {
10 | position: relative;
11 | cursor: col-resize;
12 | }
13 |
14 | .screen-diff__container {
15 | overflow-x: auto;
16 | }
17 |
18 | .screen-diff__image-over {
19 | top: 0;
20 | left: 0;
21 | bottom: 0;
22 | background: #fff;
23 | position: absolute;
24 | overflow: hidden;
25 | box-shadow: 2px 0 1px -1px #aaa;
26 | }
27 |
--------------------------------------------------------------------------------
/myreport/export/influxDbData.txt:
--------------------------------------------------------------------------------
1 | launch_status failed=0 1544459571000000000
2 | launch_status broken=0 1544459571000000000
3 | launch_status passed=1 1544459571000000000
4 | launch_status skipped=0 1544459571000000000
5 | launch_status unknown=0 1544459571000000000
6 | launch_time duration=13057 1544459571000000000
7 | launch_time min_duration=13057 1544459571000000000
8 | launch_time max_duration=13057 1544459571000000000
9 | launch_time sum_duration=13057 1544459571000000000
10 | launch_retries retries=0 1544459571000000000
11 | launch_retries run=1 1544459571000000000
12 |
--------------------------------------------------------------------------------
/config.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 | import os
4 |
5 | pck_name="com.wuba"
6 | lanuch_activity="com.wuba.activity.launch.LaunchActivity"
7 | device_name="a3f8ca3a"
8 | wait_timeout = 15
9 | click_post_delay = 0.5
10 | lanuch_time = 3
11 | bundle_id = "com.taofang.iphone"
12 | ios_device_name="86616cbaa40e52d3f9236ec982dd6f1e933a44bd"
13 | current_path = os.path.abspath(os.path.dirname(__file__))
14 | screenshot_folder = os.path.join(current_path,"screenshot")
15 | if not os.path.exists(screenshot_folder):
16 | os.mkdir(screenshot_folder)
17 | print "创建截图目录:{}".format(screenshot_folder)
--------------------------------------------------------------------------------
/myreport/widgets/behaviors.json:
--------------------------------------------------------------------------------
1 | {
2 | "total" : 2,
3 | "items" : [ {
4 | "uid" : "24e249ef1a122c78d4aa2ffcf776c293",
5 | "name" : "初始化类",
6 | "statistic" : {
7 | "failed" : 0,
8 | "broken" : 0,
9 | "skipped" : 0,
10 | "passed" : 1,
11 | "unknown" : 0,
12 | "total" : 1
13 | }
14 | }, {
15 | "uid" : "3029ffe839ca74972d760e03c243a066",
16 | "name" : "测试发现",
17 | "statistic" : {
18 | "failed" : 0,
19 | "broken" : 0,
20 | "skipped" : 0,
21 | "passed" : 1,
22 | "unknown" : 0,
23 | "total" : 1
24 | }
25 | } ]
26 | }
--------------------------------------------------------------------------------
/android/module/push.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 |
5 | """
6 | @Author : xinxi
7 | @Time : 2018/12/5 18:34
8 | @describe: 测试发布
9 | """
10 | import pytest,time,allure,sys
11 | reload(sys)
12 | sys.setdefaultencoding("utf-8")
13 | from android.module.base import Base
14 | from tools.loggers import JFMlogging
15 | logger = JFMlogging().getloger()
16 | from config import *
17 |
18 | class Push():
19 |
20 | def __init__(self, driver):
21 | self.base = Base(driver)
22 |
23 | def push_item(self,kewords):
24 | self.base.click(kewords, kewords)
25 | self.base.back()
--------------------------------------------------------------------------------
/myreport/data/suites.json:
--------------------------------------------------------------------------------
1 | {
2 | "uid" : "98d3104e051c652961429bf95fa0b5d6",
3 | "name" : "suites",
4 | "children" : [ {
5 | "name" : "testcase",
6 | "children" : [ {
7 | "name" : "test_find.TestFind.test_find",
8 | "uid" : "531c86dbca320b6",
9 | "parentUid" : "7d3977dcbf31acd3e26ecbe96342e45e",
10 | "status" : "passed",
11 | "time" : {
12 | "start" : 1544459544236,
13 | "stop" : 1544459557293,
14 | "duration" : 13057
15 | },
16 | "flaky" : false,
17 | "parameters" : [ ]
18 | } ],
19 | "uid" : "7d3977dcbf31acd3e26ecbe96342e45e"
20 | } ]
21 | }
--------------------------------------------------------------------------------
/myreport/data/packages.json:
--------------------------------------------------------------------------------
1 | {
2 | "uid" : "83edc06c07f9ae9e47eb6dd1b683e4e2",
3 | "name" : "packages",
4 | "children" : [ {
5 | "name" : "testcase",
6 | "children" : [ {
7 | "name" : "test_find.TestFind.test_find",
8 | "uid" : "531c86dbca320b6",
9 | "parentUid" : "559e15d0a5469c40d1629e36b5ae40ea",
10 | "status" : "passed",
11 | "time" : {
12 | "start" : 1544459544236,
13 | "stop" : 1544459557293,
14 | "duration" : 13057
15 | },
16 | "flaky" : false,
17 | "parameters" : [ ]
18 | } ],
19 | "uid" : "559e15d0a5469c40d1629e36b5ae40ea"
20 | } ]
21 | }
--------------------------------------------------------------------------------
/ios/module/base.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | """
5 | @Author : xinxi
6 | @Time : 2018/12/5 18:34
7 | @describe: 对元素基本操作封装
8 | """
9 |
10 | import pytest,time,os,re,yaml,json,sys,xmltodict
11 | import allure
12 | from allure_commons._allure import attach
13 | # from allure.constants import AttachmentType
14 | from allure_commons.types import AttachmentType
15 | import subprocess,base64
16 | sys.path.append("..")
17 | reload(sys)
18 | sys.setdefaultencoding("utf-8")
19 | from tools.loggers import JFMlogging
20 | from config import *
21 | logger = JFMlogging().getloger()
22 |
23 |
24 |
25 | class Base():
26 |
27 | def __init__(self, driver):
28 | self.d = driver
29 |
30 |
31 |
--------------------------------------------------------------------------------
/ios/testcase/test_home.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | """
5 | @Author : xinxi
6 | @Time : 2018/12/5 18:34
7 | @describe: 测试首页
8 | """
9 | import pytest,time,allure,sys
10 | reload(sys)
11 | sys.setdefaultencoding("utf-8")
12 | from tools.loggers import JFMlogging
13 | logger = JFMlogging().getloger()
14 | from config import *
15 |
16 | @allure.feature("测试首页")
17 | @pytest.mark.usefixtures('ios_driver_setup')
18 | class TestHome:
19 |
20 | @pytest.fixture()
21 | def init(self,scope="class"):
22 | logger.info("初始化首页模块")
23 | yield self.home
24 | logger.info("结束首页模块")
25 |
26 | @allure.story('测试首页搜索')
27 | def test_home_search(self, init):
28 | logger.info("测试首页搜索")
29 |
--------------------------------------------------------------------------------
/ios/testcase/test_login.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | """
5 | @Author : xinxi
6 | @Time : 2018/12/5 18:34
7 | @describe: 测试登录
8 | """
9 | import pytest,time,allure
10 | from tools.loggers import JFMlogging
11 | logger = JFMlogging().getloger()
12 | from config import *
13 | from ios.module.home import Home
14 |
15 |
16 | @pytest.mark.usefixtures('ios_driver_setup')
17 | @pytest.mark.run(order=1)
18 | # 指定login先执行
19 | class TestLogin:
20 |
21 | @pytest.fixture()
22 | def init(self,scope="function"):
23 | self.home = Home(self.driver)
24 | self.home.mine_tab()
25 | logger.info("初始化登录模块")
26 | yield
27 | logger.info("结束登录模块")
28 |
29 | def test_login(self):
30 | pass
--------------------------------------------------------------------------------
/myreport/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Allure Report
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/myreport/data/timeline.json:
--------------------------------------------------------------------------------
1 | {
2 | "uid" : "ab17fc5a4eb3bca4b216b548c7f9fcbc",
3 | "name" : "timeline",
4 | "children" : [ {
5 | "name" : "xinxideMacBook-Pro.local",
6 | "children" : [ {
7 | "name" : "47579-MainThread",
8 | "children" : [ {
9 | "name" : "test_find.TestFind.test_find",
10 | "uid" : "531c86dbca320b6",
11 | "parentUid" : "47b0369d7f4accff5f57d8cbd334fb75",
12 | "status" : "passed",
13 | "time" : {
14 | "start" : 1544459544236,
15 | "stop" : 1544459557293,
16 | "duration" : 13057
17 | },
18 | "flaky" : false,
19 | "parameters" : [ ]
20 | } ],
21 | "uid" : "47b0369d7f4accff5f57d8cbd334fb75"
22 | } ],
23 | "uid" : "38e3e4fcaa6be984bb74130f47fd49e3"
24 | } ]
25 | }
--------------------------------------------------------------------------------
/android/testcase/test_news.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | """
4 | @Author : xinxi
5 | @Time : 2018/12/5 18:34
6 | @describe: 测试消息中心
7 | """
8 | import pytest,time,allure
9 | from android.module.news import News
10 | from android.module.home import Home
11 | from tools.loggers import JFMlogging
12 | logger = JFMlogging().getloger()
13 | from config import *
14 |
15 | @allure.feature("测试消息中心")
16 | @pytest.mark.usefixtures('driver_setup')
17 | class TestNews:
18 |
19 | @pytest.fixture()
20 | def init(self,scope="class"):
21 | self.home = Home(self.driver)
22 | self.home.news_tab()
23 | self.news = News(self.driver)
24 | logger.info("初始化消息模块")
25 | yield self.news
26 | logger.info("结束消息模块")
27 |
28 | @pytest.mark.flaky(reruns=5, reruns_delay=2)
29 | @allure.story('测试精选活动')
30 | def test_news_good(self,init):
31 | init.news_good()
32 |
33 |
34 |
--------------------------------------------------------------------------------
/android/testcase/test_login.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | """
5 | @Author : xinxi
6 | @Time : 2018/12/5 18:34
7 | @describe: 测试登录
8 | """
9 | import pytest,time,allure
10 | from tools.loggers import JFMlogging
11 | logger = JFMlogging().getloger()
12 | from config import *
13 | from android.module.login import Login
14 | from android.module.home import Home
15 |
16 |
17 | @pytest.mark.usefixtures('driver_setup')
18 | @pytest.mark.run(order=1)
19 | # 指定login先执行
20 | class TestLogin:
21 |
22 | @pytest.fixture()
23 | def init(self,scope="function"):
24 | self.home = Home(self.driver)
25 | self.home.mine_tab()
26 | self.login = Login(self.driver)
27 | logger.info("初始化登录模块")
28 | yield self.login
29 | logger.info("结束登录模块")
30 |
31 |
32 | @allure.story('测试登录')
33 | @pytest.mark.P0
34 | def test_login(self,init):
35 | init.login()
36 |
--------------------------------------------------------------------------------
/run.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | """
5 | @Author : xinxi
6 | @Time : 2018/12/5 18:34
7 | @describe: 运行入口
8 | """
9 |
10 | import pytest,os,subprocess
11 | from tools.loggers import JFMlogging
12 | logger = JFMlogging().getloger()
13 |
14 |
15 | def init_env():
16 | cmd = "python -m uiautomator2 clear-cache"
17 | subprocess.call(cmd, shell=True)
18 | cmd = "python -m uiautomator2 init"
19 | subprocess.call(cmd, shell=True)
20 | logger.info("初始化运行环境!")
21 |
22 | def init_report():
23 | cmd = "allure generate --clean data -o reports"
24 | subprocess.call(cmd, shell=True)
25 | project_path = os.path.abspath(os.path.dirname(__file__))
26 | report_path = project_path + "/reports/" + "index.html"
27 | logger.info("报告地址:{}".format(report_path))
28 |
29 |
30 | init_env()
31 | pytest.main(["-s","--reruns=2", "android/testcase","--alluredir=data"])
32 | init_report()
33 |
34 |
--------------------------------------------------------------------------------
/android/testcase/test_find.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | """
5 | @Author : xinxi
6 | @Time : 2018/12/5 18:34
7 | @describe: 测试发现
8 | """
9 |
10 | import pytest,time,allure,sys
11 | reload(sys)
12 | sys.setdefaultencoding("utf-8")
13 | from android.module.home import Home
14 | from tools.loggers import JFMlogging
15 | logger = JFMlogging().getloger()
16 | from config import *
17 |
18 | @allure.feature("测试发现")
19 | @pytest.mark.usefixtures('driver_setup')
20 | class TestFind():
21 |
22 | @pytest.fixture()
23 | def init(self, scope="class"):
24 | self.home = Home(self.driver)
25 | self.home.find_tab()
26 | logger.info("初始化首页模块")
27 | yield self.home
28 | logger.info("结束首页模块")
29 |
30 | @allure.story('测试发现')
31 | def test_find(self, init):
32 | logger.info("测试发现")
33 |
34 | @allure.story('测试发现')
35 | def test_find(self, init):
36 | logger.info("测试发现")
37 |
38 |
--------------------------------------------------------------------------------
/ios/module/home.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | """
5 | @Author : xinxi
6 | @Time : 2018/12/5 18:34
7 | @describe: 首页
8 | """
9 | import pytest
10 | from base import Base
11 | from tools.loggers import JFMlogging
12 | logger = JFMlogging().getloger()
13 |
14 | home = "首页"
15 | find = "发现"
16 | push = "发布"
17 | news = "消息"
18 | mine = "我的"
19 | search = "搜索"
20 | more = "更多"
21 | guesslike = "推荐"
22 | searcher = ""
23 | search_edit = ""
24 | search_text = "文员"
25 |
26 |
27 | class Home(Base):
28 |
29 | def __init__(self,driver):
30 | self.driver = driver
31 |
32 | def home_tab(self):
33 | self.driver(name=home).click()
34 |
35 | def find_tab(self):
36 | self.driver(name=find).click()
37 |
38 | def mine_tab(self):
39 | self.driver(name=mine).click()
40 |
41 | def home_more_search(self,kewords):
42 | pass
43 |
44 | def home_more(self):
45 | pass
46 |
47 | def home_guesslike(self):
48 | pass
49 |
--------------------------------------------------------------------------------
/ios/module/login.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | """
5 | @Author : xinxi
6 | @Time : 2018/12/5 18:34
7 | @describe: 登录
8 | """
9 | import allure
10 | from base import Base
11 | from tools.loggers import JFMlogging
12 | from keyconfig import *
13 | from allure_commons.types import AttachmentType
14 | logger = JFMlogging().getloger()
15 |
16 | head_image = "com.wuba:id/mycenter_head_image"
17 | username_edit = "com.wuba:id/login_username"
18 | password_edit = "com.wuba:id/login_password"
19 | login_btn = "登录"
20 | head_text = "头像"
21 | username_text = "账号"
22 | password_text = "密码"
23 | my_push = "我的发布"
24 |
25 |
26 | class Login(Base):
27 |
28 | def __init__(self,driver):
29 | self.base = Base(driver)
30 |
31 | @allure.story('登录')
32 | def login(self):
33 | self.base.click(head_image,head_text)
34 | self.base.send_keys(username_edit,username,username_text)
35 | self.base.send_keys(password_edit,password,password_text)
36 | self.base.click(login_btn, login_btn)
37 | self.base.assert_exited(my_push)
--------------------------------------------------------------------------------
/android/module/login.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | """
5 | @Author : xinxi
6 | @Time : 2018/12/5 18:34
7 | @describe: 登录
8 | """
9 | import allure
10 | from base import Base
11 | from tools.loggers import JFMlogging
12 | from keyconfig import *
13 | from allure_commons.types import AttachmentType
14 | logger = JFMlogging().getloger()
15 |
16 | head_image = "com.wuba:id/mycenter_head_image"
17 | username_edit = "com.wuba:id/login_username"
18 | password_edit = "com.wuba:id/login_password"
19 | login_btn = "登录"
20 | head_text = "头像"
21 | username_text = "账号"
22 | password_text = "密码"
23 | my_push = "我的发布"
24 |
25 |
26 | class Login(Base):
27 |
28 | def __init__(self,driver):
29 | self.base = Base(driver)
30 |
31 | @allure.story('登录')
32 | def login(self):
33 | self.base.click(head_image,head_text)
34 | self.base.send_keys(username_edit,username,username_text)
35 | self.base.send_keys(password_edit,password,password_text)
36 | self.base.click(login_btn, login_btn)
37 | self.base.assert_exited(my_push)
--------------------------------------------------------------------------------
/android/testcase/test_push.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | """
5 | @Author : xinxi
6 | @Time : 2018/12/5 18:34
7 | @describe: 测试发布
8 | """
9 |
10 | import pytest,time,allure,json,sys
11 | reload(sys)
12 | sys.setdefaultencoding("utf-8")
13 | from android.module.news import News
14 | from android.module.home import Home
15 | from android.module.push import Push
16 | from tools.loggers import JFMlogging
17 | logger = JFMlogging().getloger()
18 | from config import *
19 |
20 | item = json.loads(open('./provide/push.item.json', 'r').read())
21 |
22 | @allure.feature("测试发布")
23 | @pytest.mark.usefixtures('driver_setup')
24 | class TestNews:
25 |
26 | @pytest.fixture(params=item)
27 | def item(self, request):
28 | return request.param
29 |
30 | @pytest.fixture()
31 | def init(self,scope="class"):
32 | self.home = Home(self.driver)
33 | self.home.push_tab()
34 | self.push = Push(self.driver)
35 | logger.info("初始化发布模块")
36 | yield self.push
37 | logger.info("结束发布模块")
38 |
39 |
40 | @allure.story('测试发布参数化' + '\n' + '使用json文件')
41 | def test_push_item(self,init,item):
42 | init.push_item(item['item'])
43 |
44 |
45 |
--------------------------------------------------------------------------------
/android/testcase/test_home.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | """
5 | @Author : xinxi
6 | @Time : 2018/12/5 18:34
7 | @describe: 测试首页
8 | """
9 | import pytest,time,allure,sys
10 | reload(sys)
11 | sys.setdefaultencoding("utf-8")
12 | from android.module.home import Home
13 | from tools.loggers import JFMlogging
14 | logger = JFMlogging().getloger()
15 | from config import *
16 |
17 | @allure.feature("测试首页")
18 | @pytest.mark.usefixtures('driver_setup')
19 | class TestHome:
20 |
21 | @pytest.fixture()
22 | def init(self,scope="class"):
23 | self.home = Home(self.driver)
24 | logger.info("初始化首页模块")
25 | yield self.home
26 | logger.info("结束首页模块")
27 |
28 |
29 | @allure.story('测试首页搜索')
30 | def test_home_search(self,init):
31 | init.home_search()
32 |
33 | @allure.story('测试首页搜索参数化')
34 | @pytest.mark.parametrize(('kewords'), [(u"司机"), (u"老师"), (u"公寓")])
35 | def test_home_moresearch(self, init,kewords):
36 | init.home_more_search(kewords)
37 |
38 | @allure.story('测试首页更多')
39 | @pytest.mark.P0
40 | def test_home_more(self, init):
41 | init.home_more()
42 |
43 | @allure.story('测试推荐')
44 | @pytest.mark.P1
45 | def test_home_guesslike(self,init):
46 | init.home_guesslike()
47 |
48 |
--------------------------------------------------------------------------------
/README.MD:
--------------------------------------------------------------------------------
1 | # 简介
2 | 使用uiautomator2+pytest+allure进行Android的UI自动化测试
3 |
4 | # 环境搭建
5 |
6 | ## pytest框架
7 | pip install pytest==3.7
8 |
9 | ## allure报告
10 | ```
11 | 命令:
12 | py.test --alluredir=reports
13 | allure generate reports
14 | allure generate reports --clean
15 | allure generate --clean reports -o myreport
16 | 用火狐浏览器打开,chrome会404
17 | ```
18 |
19 |
20 | ## uiautomator2官方文档
21 | https://github.com/openatx/uiautomator2
22 |
23 | ## 安装atx-agent
24 | pip uninstall uiautomator2
25 | pip install --pre uiautomator2
26 | python -m uiautomator2 init
27 |
28 |
29 | ## 查看页面元素
30 | pip install weditor
31 | python -m weditor
32 |
33 |
34 | ## 运行命令
35 |
36 | 测试单个方法: pytest -k test_home_search --alluredir=reports -s
37 | 测试单个用例:pytest -s testcase/test_find.py
38 | 测试PO级Case: pytest -v -m "P0" --alluredir=reports
39 | 不测试PO级Case: pytest -v -m "not P0" --alluredir=reports
40 |
41 | ## 生成报告
42 | allure generate --clean reports -o myreport
43 |
44 | ## 无线连接
45 | ```
46 | 手机的ip地址需要和pc电脑的ip地址在一个网段上
47 | d = ut2.connect("192.168.129.93")
48 | ```
49 |
50 | ## 学习笔记
51 | https://docs.pytest.org/en/latest/example/simple.html
52 |
53 |
54 | ## iOS环境搭建
55 | 查看设备中app列表
56 | ideviceinstaller -u 86616cbaa40e52d3f9236ec982dd6f1e933a44bd -l
57 |
58 |
59 |
60 | 浅谈自动化测试工具 python-uiautomator2
61 | https://testerhome.com/topics/11357
--------------------------------------------------------------------------------
/myreport/data/behaviors.json:
--------------------------------------------------------------------------------
1 | {
2 | "uid" : "b1a8273437954620fa374b796ffaacdd",
3 | "name" : "behaviors",
4 | "children" : [ {
5 | "name" : "初始化类",
6 | "children" : [ {
7 | "name" : "测试发现",
8 | "children" : [ {
9 | "name" : "test_find.TestFind.test_find",
10 | "uid" : "531c86dbca320b6",
11 | "parentUid" : "943cad40cbafd05d39f8d569d0d4dfa7",
12 | "status" : "passed",
13 | "time" : {
14 | "start" : 1544459544236,
15 | "stop" : 1544459557293,
16 | "duration" : 13057
17 | },
18 | "flaky" : false,
19 | "parameters" : [ ]
20 | } ],
21 | "uid" : "943cad40cbafd05d39f8d569d0d4dfa7"
22 | } ],
23 | "uid" : "24e249ef1a122c78d4aa2ffcf776c293"
24 | }, {
25 | "name" : "测试发现",
26 | "children" : [ {
27 | "name" : "测试发现",
28 | "children" : [ {
29 | "name" : "test_find.TestFind.test_find",
30 | "uid" : "531c86dbca320b6",
31 | "parentUid" : "ff080dcee66f9dd40d78d2246e4ed59a",
32 | "status" : "passed",
33 | "time" : {
34 | "start" : 1544459544236,
35 | "stop" : 1544459557293,
36 | "duration" : 13057
37 | },
38 | "flaky" : false,
39 | "parameters" : [ ]
40 | } ],
41 | "uid" : "ff080dcee66f9dd40d78d2246e4ed59a"
42 | } ],
43 | "uid" : "3029ffe839ca74972d760e03c243a066"
44 | } ]
45 | }
--------------------------------------------------------------------------------
/tools/loggers.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 |
5 | import os
6 | import os.path
7 | import socket
8 | import logging
9 | import logging.handlers
10 | logging.basicConfig()
11 |
12 |
13 | def singleton(cls, *args, **kw):
14 | instances = {}
15 |
16 | def _singleton():
17 | if cls not in instances:
18 | instances[cls] = cls(*args, **kw)
19 | return instances[cls]
20 | return _singleton
21 |
22 |
23 | @singleton
24 | class JFMlogging(object):
25 | logger = logging.getLogger()
26 |
27 | def __init__(self):
28 | host_name = socket.gethostname()
29 | # ip = socket.gethostbyname(host_name)
30 | logging_msg_format = '[%(asctime)s] [%(levelname)s] [' + host_name + '][%(module)s.py - line:%(lineno)d] %(message)s'
31 | logging_date_format = '%Y-%m-%d %H:%M:%S'
32 | log_path = 'logs' # 日志存放目录
33 | logging.basicConfig(level=logging.INFO, format=logging_msg_format, datefmt=logging_date_format)
34 | self.logger.setLevel(logging.INFO)
35 |
36 | if not os.path.exists(log_path):
37 | os.mkdir(log_path)
38 | log_file = os.path.join(log_path, 'system.log')
39 |
40 | fileHandler = logging.handlers.TimedRotatingFileHandler(log_file, 'midnight', 1)
41 | fileHandler.setFormatter(logging.Formatter(logging_msg_format))
42 | self.logger.addHandler(fileHandler)
43 |
44 | def getloger(self):
45 | return self.logger
46 |
--------------------------------------------------------------------------------
/driver.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | """
5 | @Author : xinxi
6 | @Time : 2018/12/5 18:34
7 | @describe: 创建uiautomator2
8 | """
9 | import atx,time
10 | import subprocess
11 | import uiautomator2 as ut2
12 | from config import *
13 | from tools.loggers import JFMlogging
14 | logger = JFMlogging().getloger()
15 |
16 | class Driver():
17 |
18 | def init_driver(self,device_name):
19 | '''
20 | 初始化driver
21 | is_clear:清除数据
22 | :return:
23 | '''
24 | try:
25 | logger.info(device_name)
26 | d = ut2.connect(device_name)
27 | # d = ut2.connect("192.168.129.93")
28 | #logger.info("设备信息:{}".format(d.info))
29 | # 设置全局寻找元素超时时间
30 | d.wait_timeout = wait_timeout # default 20.0
31 | # 设置点击元素延迟时间
32 | d.click_post_delay = click_post_delay
33 | #d.service("uiautomator").stop()
34 | # 停止uiautomator 可能和atx agent冲突
35 | logger.info("连接设备:{}".format(device_name))
36 | return d
37 | except Exception as e:
38 | logger.info("初始化driver异常!{}".format(e))
39 |
40 |
41 |
42 | def init_ios_driver(self, device_name):
43 | try:
44 | d = atx.connect("http://localhost:8100")
45 | d.start_app(bundle_id)
46 | time.sleep(5)
47 | return d
48 | except Exception as e:
49 | logger.info("初始化ios端driver异常!{}".format(e))
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/myreport/plugins/packages/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | allure.api.addTranslation('en', {
4 | tab: {
5 | packages: {
6 | name: 'Packages'
7 | }
8 | }
9 | });
10 |
11 | allure.api.addTranslation('ru', {
12 | tab: {
13 | packages: {
14 | name: 'Пакеты'
15 | }
16 | }
17 | });
18 |
19 | allure.api.addTranslation('zh', {
20 | tab: {
21 | packages: {
22 | name: '包'
23 | }
24 | }
25 | });
26 |
27 | allure.api.addTranslation('de', {
28 | tab: {
29 | packages: {
30 | name: 'Pakete'
31 | }
32 | }
33 | });
34 |
35 | allure.api.addTranslation('he', {
36 | tab: {
37 | packages: {
38 | name: 'חבילות'
39 | }
40 | }
41 | });
42 |
43 | allure.api.addTranslation('br', {
44 | tab: {
45 | packages: {
46 | name: 'Pacotes'
47 | }
48 | }
49 | });
50 |
51 | allure.api.addTab('packages', {
52 | title: 'tab.packages.name', icon: 'fa fa-align-left',
53 | route: 'packages(/)(:testGroup)(/)(:testResult)(/)(:testResultTab)(/)',
54 | onEnter: (function (testGroup, testResult, testResultTab) {
55 | return new allure.components.TreeLayout({
56 | testGroup: testGroup,
57 | testResult: testResult,
58 | testResultTab: testResultTab,
59 | tabName: 'tab.packages.name',
60 | baseUrl: 'packages',
61 | url: 'data/packages.json'
62 | });
63 | })
64 | });
65 |
--------------------------------------------------------------------------------
/android/module/home.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | """
5 | @Author : xinxi
6 | @Time : 2018/12/5 18:34
7 | @describe: 首页
8 | """
9 | import pytest
10 | from base import Base
11 | from tools.loggers import JFMlogging
12 | logger = JFMlogging().getloger()
13 |
14 | home = "首页"
15 | find = "发现"
16 | push = "发布"
17 | news = "消息"
18 | mine = "我的"
19 | search = "搜索"
20 | more = "更多"
21 | guesslike = "推荐"
22 | searcher = "com.wuba:id/toolbar_searcher"
23 | search_edit = "com.wuba:id/searcherInputEditText"
24 | search_text = "文员"
25 |
26 |
27 | class Home(Base):
28 |
29 | def __init__(self,driver):
30 | self.base = Base(driver)
31 |
32 | def home_tab(self):
33 | self.base.click(home,home)
34 |
35 | def find_tab(self):
36 | self.base.click(find,find)
37 |
38 | def push_tab(self):
39 | self.base.click(push, push)
40 |
41 | def news_tab(self):
42 | self.base.click(news, news)
43 |
44 | def mine_tab(self):
45 | self.base.click(mine,mine)
46 |
47 | def home_search(self):
48 | self.base.click(searcher,search)
49 | self.base.send_keys(search_edit,search_text,search_text)
50 |
51 | def home_more_search(self,kewords):
52 | self.base.click(searcher, search)
53 | self.base.send_keys(search_edit, kewords, search_text)
54 | self.base.back()
55 | self.base.back()
56 |
57 | def home_more(self):
58 | self.base.click(more,more)
59 |
60 | def home_guesslike(self):
61 | self.base.swip_down_element(guesslike)
62 | self.base.assert_exited(guesslike)
63 |
--------------------------------------------------------------------------------
/myreport/data/test-cases/531c86dbca320b6.json:
--------------------------------------------------------------------------------
1 | {
2 | "uid" : "531c86dbca320b6",
3 | "name" : "test_find.TestFind.test_find",
4 | "fullName" : "testcase.test_find.TestFind.test_find",
5 | "historyId" : "497a1938a0520647634d7c6a3bc0b5e1",
6 | "time" : {
7 | "start" : 1544459544236,
8 | "stop" : 1544459557293,
9 | "duration" : 13057
10 | },
11 | "description" : "",
12 | "descriptionHtml" : "",
13 | "status" : "passed",
14 | "flaky" : false,
15 | "beforeStages" : [ ],
16 | "testStage" : {
17 | "status" : "passed",
18 | "steps" : [ ],
19 | "attachments" : [ {
20 | "uid" : "a1afe3d22dcb0c69",
21 | "name" : "Captured log setup",
22 | "source" : "a1afe3d22dcb0c69.txt",
23 | "type" : "text/plain",
24 | "size" : 351
25 | }, {
26 | "uid" : "aa5d69676c97f51",
27 | "name" : "Captured log call",
28 | "source" : "aa5d69676c97f51.txt",
29 | "type" : "text/plain",
30 | "size" : 52
31 | } ],
32 | "parameters" : [ ],
33 | "stepsCount" : 0,
34 | "attachmentsCount" : 2,
35 | "shouldDisplayMessage" : false,
36 | "hasContent" : true
37 | },
38 | "afterStages" : [ ],
39 | "labels" : [ {
40 | "name" : "feature",
41 | "value" : "初始化类"
42 | }, {
43 | "name" : "feature",
44 | "value" : "测试发现"
45 | }, {
46 | "name" : "framework",
47 | "value" : "pytest"
48 | }, {
49 | "name" : "host",
50 | "value" : "xinxideMacBook-Pro.local"
51 | }, {
52 | "name" : "language",
53 | "value" : "cpython2"
54 | }, {
55 | "name" : "severity",
56 | "value" : "normal"
57 | }, {
58 | "name" : "story",
59 | "value" : "测试发现"
60 | }, {
61 | "name" : "thread",
62 | "value" : "47579-MainThread"
63 | }, {
64 | "name" : "suite",
65 | "value" : "testcase"
66 | }, {
67 | "name" : "testClass",
68 | "value" : "testcase"
69 | }, {
70 | "name" : "testMethod",
71 | "value" : "test_find.TestFind.test_find"
72 | }, {
73 | "name" : "package",
74 | "value" : "testcase"
75 | }, {
76 | "name" : "resultFormat",
77 | "value" : "allure1"
78 | } ],
79 | "parameters" : [ ],
80 | "links" : [ ],
81 | "hidden" : false,
82 | "retry" : false,
83 | "extra" : {
84 | "severity" : "normal",
85 | "retries" : [ ],
86 | "categories" : [ ],
87 | "tags" : [ ]
88 | },
89 | "source" : "531c86dbca320b6.json",
90 | "parameterValues" : [ ]
91 | }
--------------------------------------------------------------------------------
/failures:
--------------------------------------------------------------------------------
1 | testcase/test_home.py::TestHome::()::test_home_guesslike
2 | testcase/test_home.py::TestHome::()::test_home_guesslike
3 | testcase/test_home.py::TestHome::()::test_home_guesslike
4 | testcase/test_home.py::TestHome::()::test_home_guesslike
5 | testcase/test_home.py::TestHome::()::test_home_guesslike
6 | testcase/test_home.py::TestHome::()::test_home_guesslike
7 | testcase/test_home.py::TestHome::()::test_home_guesslike
8 | testcase/test_home.py::TestHome::()::test_home_guesslike
9 | testcase/test_home.py::TestHome::()::test_home_guesslike
10 | testcase/test_home.py::TestHome::()::test_home_guesslike
11 | testcase/test_home.py::TestHome::()::test_home_guesslike
12 | testcase/test_home.py::TestHome::()::test_home_guesslike
13 | testcase/test_home.py::TestHome::()::test_home_guesslike
14 | testcase/test_home.py::TestHome::()::test_home_guesslike
15 | testcase/test_home.py::TestHome::()::test_home_guesslike
16 | testcase/test_home.py::TestHome::()::test_home_guesslike
17 | testcase/test_home.py::TestHome::()::test_home_guesslike
18 | testcase/test_home.py::TestHome::()::test_home_guesslike
19 | testcase/test_home.py::TestHome::()::test_home_guesslike
20 | testcase/test_home.py::TestHome::()::test_home_guesslike
21 | testcase/test_home.py::TestHome::()::test_home_guesslike
22 | testcase/test_home.py::TestHome::()::test_home_guesslike
23 | testcase/test_home.py::TestHome::()::test_home_guesslike
24 | testcase/test_login.py::TestLogin::()::test_login
25 | testcase/test_login.py::TestLogin::()::test_login
26 | testcase/test_login.py::TestLogin::()::test_login
27 | testcase/test_home.py::TestHome::()::test_home_guesslike
28 | testcase/test_home.py::TestHome::()::test_home_guesslike
29 | testcase/test_home.py::TestHome::()::test_home_guesslike
30 | testcase/test_login.py::TestLogin::()::test_login
31 | testcase/test_login.py::TestLogin::()::test_login
32 | testcase/test_login.py::TestLogin::()::test_login
33 | testcase/test_home.py::TestHome::()::test_home_guesslike
34 | testcase/test_home.py::TestHome::()::test_home_guesslike
35 | testcase/test_home.py::TestHome::()::test_home_guesslike
36 | android/testcase/test_login.py::TestLogin::()::test_login
37 | android/testcase/test_home.py::TestHome::()::test_home_guesslike
38 | android/testcase/test_login.py::TestLogin::()::test_login
39 | android/testcase/test_home.py::TestHome::()::test_home_guesslike
40 | android/testcase/test_home.py::TestHome::()::test_home_guesslike
41 | android/testcase/test_home.py::TestHome::()::test_home_guesslike
42 | android/testcase/test_home.py::TestHome::()::test_home_guesslike
43 | android/testcase/test_login.py::TestLogin::()::test_login
44 | android/testcase/test_login.py::TestLogin::()::test_login
45 | android/testcase/test_login.py::TestLogin::()::test_login
46 |
--------------------------------------------------------------------------------
/myreport/plugins/behaviors/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | allure.api.addTranslation('en', {
4 | tab: {
5 | behaviors: {
6 | name: 'Behaviors'
7 | }
8 | },
9 | widget: {
10 | behaviors: {
11 | name: 'Features by stories',
12 | showAll: 'show all'
13 | }
14 | }
15 | });
16 |
17 | allure.api.addTranslation('ru', {
18 | tab: {
19 | behaviors: {
20 | name: 'Функциональность'
21 | }
22 | },
23 | widget: {
24 | behaviors: {
25 | name: 'Функциональность',
26 | showAll: 'показать все'
27 | }
28 | }
29 | });
30 |
31 | allure.api.addTranslation('zh', {
32 | tab: {
33 | behaviors: {
34 | name: '功能'
35 | }
36 | },
37 | widget: {
38 | behaviors: {
39 | name: '特性场景',
40 | showAll: '显示所有'
41 | }
42 | }
43 | });
44 |
45 | allure.api.addTranslation('de', {
46 | tab: {
47 | behaviors: {
48 | name: 'Verhalten'
49 | }
50 | },
51 | widget: {
52 | behaviors: {
53 | name: 'Features nach Stories',
54 | showAll: 'Zeige alle'
55 | }
56 | }
57 | });
58 |
59 | allure.api.addTranslation('he', {
60 | tab: {
61 | behaviors: {
62 | name: 'התנהגויות'
63 | }
64 | },
65 | widget: {
66 | behaviors: {
67 | name: 'תכונות לפי סיפורי משתמש',
68 | showAll: 'הצג הכול'
69 | }
70 | }
71 | });
72 |
73 | allure.api.addTranslation('br', {
74 | tab: {
75 | behaviors: {
76 | name: 'Comportamentos'
77 | }
78 | },
79 | widget: {
80 | behaviors: {
81 | name: 'Funcionalidades por história',
82 | showAll: 'Mostrar tudo'
83 | }
84 | }
85 | });
86 |
87 | allure.api.addTab('behaviors', {
88 | title: 'tab.behaviors.name', icon: 'fa fa-list',
89 | route: 'behaviors(/)(:testGroup)(/)(:testResult)(/)(:testResultTab)(/)',
90 | onEnter: (function (testGroup, testResult, testResultTab) {
91 | return new allure.components.TreeLayout({
92 | testGroup: testGroup,
93 | testResult: testResult,
94 | testResultTab: testResultTab,
95 | tabName: 'tab.behaviors.name',
96 | baseUrl: 'behaviors',
97 | url: 'data/behaviors.json',
98 | csvUrl: 'data/behaviors.csv'
99 | });
100 | })
101 | });
102 |
103 | allure.api.addWidget('widgets', 'behaviors', allure.components.WidgetStatusView.extend({
104 | rowTag: 'a',
105 | title: 'widget.behaviors.name',
106 | baseUrl: 'behaviors',
107 | showLinks: true
108 | }));
--------------------------------------------------------------------------------
/android/testcase/logs/system.log:
--------------------------------------------------------------------------------
1 | [2018-12-11 00:27:42,040] [INFO] [xinxideMacBook-Pro.local][conftest.py - line:27] 自动化测试开始!
2 | [2018-12-11 00:27:42,040] [INFO] [xinxideMacBook-Pro.local][driver.py - line:24] a3f8ca3a
3 | [2018-12-11 00:27:42,295] [INFO] [xinxideMacBook-Pro.local][driver.py - line:33] 连接设备:a3f8ca3a
4 | [2018-12-11 00:27:42,296] [INFO] [xinxideMacBook-Pro.local][conftest.py - line:29] driver初始化
5 | [2018-12-11 00:27:51,652] [INFO] [xinxideMacBook-Pro.local][base.py - line:53] 点击元素:发现
6 | [2018-12-11 00:27:51,652] [INFO] [xinxideMacBook-Pro.local][test_find.py - line:26] 初始化首页模块
7 | [2018-12-11 00:27:51,655] [INFO] [xinxideMacBook-Pro.local][test_find.py - line:32] 测试发现
8 | [2018-12-11 00:27:51,657] [INFO] [xinxideMacBook-Pro.local][test_find.py - line:28] 结束首页模块
9 | [2018-12-11 00:27:51,658] [INFO] [xinxideMacBook-Pro.local][conftest.py - line:35] 自动化测试结束!
10 | [2018-12-11 00:28:08,890] [INFO] [xinxideMacBook-Pro.local][conftest.py - line:27] 自动化测试开始!
11 | [2018-12-11 00:28:08,891] [INFO] [xinxideMacBook-Pro.local][driver.py - line:24] a3f8ca3a
12 | [2018-12-11 00:28:09,033] [INFO] [xinxideMacBook-Pro.local][driver.py - line:33] 连接设备:a3f8ca3a
13 | [2018-12-11 00:28:09,033] [INFO] [xinxideMacBook-Pro.local][conftest.py - line:29] driver初始化
14 | [2018-12-11 00:28:19,951] [INFO] [xinxideMacBook-Pro.local][base.py - line:53] 点击元素:发现
15 | [2018-12-11 00:28:19,953] [INFO] [xinxideMacBook-Pro.local][test_find.py - line:26] 初始化首页模块
16 | [2018-12-11 00:28:19,957] [INFO] [xinxideMacBook-Pro.local][test_find.py - line:32] 测试发现
17 | [2018-12-11 00:28:19,958] [INFO] [xinxideMacBook-Pro.local][test_find.py - line:28] 结束首页模块
18 | [2018-12-11 00:28:19,959] [INFO] [xinxideMacBook-Pro.local][conftest.py - line:35] 自动化测试结束!
19 | [2018-12-11 00:28:33,380] [INFO] [xinxideMacBook-Pro.local][conftest.py - line:27] 自动化测试开始!
20 | [2018-12-11 00:28:33,381] [INFO] [xinxideMacBook-Pro.local][driver.py - line:24] a3f8ca3a
21 | [2018-12-11 00:28:33,533] [INFO] [xinxideMacBook-Pro.local][driver.py - line:33] 连接设备:a3f8ca3a
22 | [2018-12-11 00:28:33,534] [INFO] [xinxideMacBook-Pro.local][conftest.py - line:29] driver初始化
23 | [2018-12-11 00:28:52,946] [INFO] [xinxideMacBook-Pro.local][conftest.py - line:35] 自动化测试结束!
24 | [2018-12-11 00:29:22,160] [INFO] [xinxideMacBook-Pro.local][conftest.py - line:27] 自动化测试开始!
25 | [2018-12-11 00:29:22,160] [INFO] [xinxideMacBook-Pro.local][driver.py - line:24] a3f8ca3a
26 | [2018-12-11 00:29:22,295] [INFO] [xinxideMacBook-Pro.local][driver.py - line:33] 连接设备:a3f8ca3a
27 | [2018-12-11 00:29:22,296] [INFO] [xinxideMacBook-Pro.local][conftest.py - line:29] driver初始化
28 | [2018-12-11 00:29:35,444] [INFO] [xinxideMacBook-Pro.local][conftest.py - line:35] 自动化测试结束!
29 | [2018-12-11 00:29:51,144] [INFO] [xinxideMacBook-Pro.local][conftest.py - line:27] 自动化测试开始!
30 | [2018-12-11 00:29:51,144] [INFO] [xinxideMacBook-Pro.local][driver.py - line:24] a3f8ca3a
31 | [2018-12-11 00:29:51,284] [INFO] [xinxideMacBook-Pro.local][driver.py - line:33] 连接设备:a3f8ca3a
32 | [2018-12-11 00:29:51,285] [INFO] [xinxideMacBook-Pro.local][conftest.py - line:29] driver初始化
33 | [2018-12-11 00:29:59,787] [INFO] [xinxideMacBook-Pro.local][base.py - line:53] 点击元素:发现
34 | [2018-12-11 00:29:59,787] [INFO] [xinxideMacBook-Pro.local][test_find.py - line:26] 初始化首页模块
35 | [2018-12-11 00:29:59,789] [INFO] [xinxideMacBook-Pro.local][test_find.py - line:32] 测试发现
36 | [2018-12-11 00:29:59,790] [INFO] [xinxideMacBook-Pro.local][test_find.py - line:28] 结束首页模块
37 | [2018-12-11 00:29:59,790] [INFO] [xinxideMacBook-Pro.local][conftest.py - line:35] 自动化测试结束!
38 |
--------------------------------------------------------------------------------
/logs/system.log.2018-12-09:
--------------------------------------------------------------------------------
1 | [2018-12-09 23:43:05,377] [INFO] [xinxideMacBook-Pro.local][test_login.py - line:18] 登录测试...
2 | [2018-12-09 23:46:25,346] [INFO] [xinxideMacBook-Pro.local][base.py - line:23] app测试开始!
3 | [2018-12-09 23:46:25,347] [INFO] [xinxideMacBook-Pro.local][driver.py - line:27] a3f8ca3a
4 | [2018-12-09 23:46:25,596] [INFO] [xinxideMacBook-Pro.local][driver.py - line:29] 设备信息:{u'displayRotation': 1, u'displaySizeDpY': 393, u'displaySizeDpX': 816, u'screenOn': True, u'displayWidth': 2004, u'productName': u'sirius', u'currentPackageName': u'com.tencent.qqlive', u'sdkInt': 27, u'displayHeight': 1080, u'naturalOrientation': False}
5 | [2018-12-09 23:46:25,597] [INFO] [xinxideMacBook-Pro.local][driver.py - line:36] 连接设备:a3f8ca3a
6 | [2018-12-09 23:46:25,597] [INFO] [xinxideMacBook-Pro.local][base.py - line:25] driver初始化
7 | [2018-12-09 23:46:25,615] [INFO] [xinxideMacBook-Pro.local][base.py - line:27] app测试结束!
8 | [2018-12-09 23:50:14,652] [INFO] [xinxideMacBook-Pro.local][base.py - line:22] app测试开始!
9 | [2018-12-09 23:50:14,653] [INFO] [xinxideMacBook-Pro.local][driver.py - line:27] a3f8ca3a
10 | [2018-12-09 23:50:14,918] [INFO] [xinxideMacBook-Pro.local][driver.py - line:29] 设备信息:{u'displayRotation': 1, u'displaySizeDpY': 393, u'displaySizeDpX': 816, u'screenOn': True, u'displayWidth': 2004, u'productName': u'sirius', u'currentPackageName': u'com.tencent.qqlive', u'sdkInt': 27, u'displayHeight': 1080, u'naturalOrientation': False}
11 | [2018-12-09 23:50:14,918] [INFO] [xinxideMacBook-Pro.local][driver.py - line:36] 连接设备:a3f8ca3a
12 | [2018-12-09 23:50:14,919] [INFO] [xinxideMacBook-Pro.local][base.py - line:24] driver初始化
13 | [2018-12-09 23:50:14,937] [INFO] [xinxideMacBook-Pro.local][base.py - line:26] app测试结束!
14 | [2018-12-09 23:50:30,927] [INFO] [xinxideMacBook-Pro.local][base.py - line:22] app测试开始!
15 | [2018-12-09 23:50:30,928] [INFO] [xinxideMacBook-Pro.local][driver.py - line:27] a3f8ca3a
16 | [2018-12-09 23:50:31,147] [INFO] [xinxideMacBook-Pro.local][driver.py - line:29] 设备信息:{u'displayRotation': 1, u'displaySizeDpY': 393, u'displaySizeDpX': 816, u'screenOn': True, u'displayWidth': 2004, u'productName': u'sirius', u'currentPackageName': u'com.tencent.qqlive', u'sdkInt': 27, u'displayHeight': 1080, u'naturalOrientation': False}
17 | [2018-12-09 23:50:31,148] [INFO] [xinxideMacBook-Pro.local][driver.py - line:36] 连接设备:a3f8ca3a
18 | [2018-12-09 23:50:31,148] [INFO] [xinxideMacBook-Pro.local][base.py - line:24] driver初始化
19 | [2018-12-09 23:50:31,166] [INFO] [xinxideMacBook-Pro.local][base.py - line:26] app测试结束!
20 | [2018-12-09 23:51:04,920] [INFO] [xinxideMacBook-Pro.local][base.py - line:22] app测试开始!
21 | [2018-12-09 23:51:04,920] [INFO] [xinxideMacBook-Pro.local][driver.py - line:27] a3f8ca3a
22 | [2018-12-09 23:51:05,159] [INFO] [xinxideMacBook-Pro.local][driver.py - line:29] 设备信息:{u'displayRotation': 1, u'displaySizeDpY': 393, u'displaySizeDpX': 816, u'screenOn': True, u'displayWidth': 2004, u'productName': u'sirius', u'currentPackageName': u'com.tencent.qqlive', u'sdkInt': 27, u'displayHeight': 1080, u'naturalOrientation': False}
23 | [2018-12-09 23:51:05,159] [INFO] [xinxideMacBook-Pro.local][driver.py - line:36] 连接设备:a3f8ca3a
24 | [2018-12-09 23:51:05,159] [INFO] [xinxideMacBook-Pro.local][base.py - line:24] driver初始化
25 | [2018-12-09 23:51:05,174] [INFO] [xinxideMacBook-Pro.local][base.py - line:26] app测试结束!
26 | [2018-12-09 23:55:33,644] [INFO] [xinxideMacBook-Pro.local][base.py - line:22] app测试开始!
27 | [2018-12-09 23:55:33,644] [INFO] [xinxideMacBook-Pro.local][driver.py - line:27] a3f8ca3a
28 | [2018-12-09 23:55:33,892] [INFO] [xinxideMacBook-Pro.local][driver.py - line:29] 设备信息:{u'displayRotation': 1, u'displaySizeDpY': 393, u'displaySizeDpX': 816, u'screenOn': True, u'displayWidth': 2004, u'productName': u'sirius', u'currentPackageName': u'com.tencent.qqlive', u'sdkInt': 27, u'displayHeight': 1080, u'naturalOrientation': False}
29 | [2018-12-09 23:55:33,893] [INFO] [xinxideMacBook-Pro.local][driver.py - line:36] 连接设备:a3f8ca3a
30 | [2018-12-09 23:55:33,893] [INFO] [xinxideMacBook-Pro.local][base.py - line:24] driver初始化
31 | [2018-12-09 23:55:33,912] [INFO] [xinxideMacBook-Pro.local][base.py - line:26] app测试结束!
32 |
--------------------------------------------------------------------------------
/myreport/plugins/screen-diff/index.js:
--------------------------------------------------------------------------------
1 | (function () {
2 | var settings = allure.getPluginSettings('screen-diff', {diffType: 'diff'});
3 |
4 | function renderImage(src) {
5 | return '' +
6 | '

' +
7 | '
';
8 | }
9 |
10 | function renderDiffContent(type, data) {
11 | function findImage(name) {
12 | if (data.testStage && data.testStage.attachments) {
13 | return data.testStage.attachments.filter(function (attachment) {
14 | return attachment.name === name;
15 | })[0];
16 | }
17 | return null;
18 | }
19 |
20 | var diffImage = findImage('diff');
21 | var actualImage = findImage('actual');
22 | var expectedImage = findImage('expected');
23 |
24 | if (!diffImage && !actualImage && !expectedImage) {
25 | return 'Diff, actual and expected image have not been provided.';
26 | }
27 |
28 | if (type === 'diff') {
29 | if (!diffImage) {
30 | return renderImage(actualImage.source);
31 | }
32 | return renderImage(diffImage.source);
33 | }
34 | if (type === 'overlay') {
35 | return '' +
36 | '

' +
37 | '
' +
38 | '

' +
39 | '
' +
40 | '
';
41 | }
42 | }
43 |
44 | var ScreenDiffView = Backbone.Marionette.View.extend({
45 | className: 'pane__section',
46 | events: {
47 | 'click [name="screen-diff-type"]': 'onDiffTypeChange',
48 | 'mousemove .screen-diff__overlay': 'onOverlayMove'
49 | },
50 | templateContext: function () {
51 | return {
52 | diffType: settings.get('diffType')
53 | }
54 | },
55 | template: function (data) {
56 | var testType = data.labels.filter(function (label) {
57 | return label.name === 'testType'
58 | })[0];
59 |
60 | if (!testType || testType.value !== 'screenshotDiff') {
61 | return '';
62 | }
63 |
64 | return 'Screen Diff
' +
65 | '';
72 | },
73 | adjustImageSize: function (event) {
74 | var overImage = this.$(event.target);
75 | overImage.width(overImage.width());
76 | },
77 | onRender: function () {
78 | const diffType = settings.get('diffType');
79 | this.$('[name="screen-diff-type"][value="' + diffType + '"]').prop('checked', true);
80 | if (diffType === 'overlay') {
81 | this.$('.screen-diff__image-over img').on('load', this.adjustImageSize.bind(this));
82 | }
83 | },
84 | onOverlayMove: function (event) {
85 | var pageX = event.pageX;
86 | var containerScroll = this.$('.screen-diff__container').scrollLeft();
87 | var elementX = event.currentTarget.getBoundingClientRect().left;
88 | var delta = pageX - elementX + containerScroll;
89 | this.$('.screen-diff__image-over').width(delta);
90 | },
91 | onDiffTypeChange: function (event) {
92 | settings.save('diffType', event.target.value);
93 | this.render();
94 | }
95 | });
96 | allure.api.addTestResultBlock(ScreenDiffView, {position: 'before'});
97 | })();
98 |
--------------------------------------------------------------------------------
/conftest.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | """
5 | @Author : xinxi
6 | @Time : 2018/12/5 18:34
7 | @describe: 创建driver
8 | """
9 | import os,sys,subprocess,pytest,time,allure
10 | import base64,atx
11 | from android.module.base import Base
12 | import uiautomator2 as ut2
13 | import uiautomator2.ext.htmlreport as htmlreport
14 | from driver import Driver
15 | from config import *
16 | from allure_commons._allure import attach
17 | from allure_commons.types import AttachmentType
18 | sys.path.append('..')
19 | from tools.loggers import JFMlogging
20 | logger = JFMlogging().getloger()
21 |
22 |
23 | # 当设置autouse为True时,
24 | # 在一个session内的所有的test都会自动调用这个fixture
25 | @pytest.fixture()
26 | def driver_setup(request):
27 | logger.info("自动化测试开始!")
28 | request.instance.driver = Driver().init_driver(device_name)
29 | logger.info("driver初始化")
30 | request.instance.driver.app_start(pck_name, lanuch_activity, stop=True)
31 | time.sleep(lanuch_time)
32 | allow(request.instance.driver)
33 | def driver_teardown():
34 | logger.info("自动化测试结束!")
35 | request.instance.driver.app_stop(pck_name)
36 | request.addfinalizer(driver_teardown)
37 |
38 |
39 | @pytest.hookimpl(tryfirst=True, hookwrapper=True)
40 | def pytest_runtest_makereport(item, call):
41 | '''
42 | hook pytest失败
43 | :param item:
44 | :param call:
45 | :return:
46 | '''
47 | # execute all other hooks to obtain the report object
48 | outcome = yield
49 | rep = outcome.get_result()
50 | # we only look at actual failing test calls, not setup/teardown
51 | if rep.when == "call" and rep.failed:
52 | mode = "a" if os.path.exists("failures") else "w"
53 | with open("failures", mode) as f:
54 | # let's also access a fixture for the fun of it
55 | if "tmpdir" in item.fixturenames:
56 | extra = " (%s)" % item.funcargs["tmpdir"]
57 | else:
58 | extra = ""
59 | f.write(rep.nodeid + extra + "\n")
60 | pic_info = adb_screen_shot()
61 | with allure.step('添加失败截图...'):
62 | allure.attach("失败截图", pic_info, allure.attach_type.JPG)
63 |
64 |
65 | def allow(driver):
66 | driver.watcher("允许").when(text="允许").click(text="允许")
67 | driver.watcher("跳过 >").when(text="跳过 >").click(text="跳过 >")
68 | driver.watcher("不要啦").when(text="不要啦").click(text="不要啦")
69 |
70 |
71 | def screen_shot(driver):
72 | '''
73 | 截图操作
74 | pic_name:截图名称
75 | :return:
76 | '''
77 | try:
78 | fail_time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
79 | fail_pic = str(fail_time) + "截图"
80 | pic_name = os.path.join(screenshot_folder, fail_pic)
81 | driver.screenshot("{}.jpg".format(pic_name))
82 | logger.info('截图:{}'.format(pic_name))
83 | f = open(pic_name, 'rb') # 二进制方式打开图文件
84 | base64_str = base64.b64encode(f.read()) # 读取文件内容,转换为base64编码
85 | f.close()
86 | return base64_str
87 | except Exception as e:
88 | logger.info("{}截图失败!{}".format(pic_name, e))
89 |
90 |
91 | def adb_screen_shot():
92 | '''
93 | adb截图
94 | :return:
95 | '''
96 | file_info = ''
97 | fail_time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
98 | fail_pic = str(fail_time) + "截图.jpg"
99 | pic_name = os.path.join(screenshot_folder, fail_pic)
100 | cmd = 'adb shell /system/bin/screencap -p /sdcard/screenshot.jpg'
101 | subprocess.call(cmd,shell=True)
102 | cmd = 'adb pull /sdcard/screenshot.jpg {}'.format(pic_name)
103 | subprocess.call(cmd, shell=True)
104 | with open(pic_name, 'rb') as r:
105 | file_info = r.read()
106 | return file_info
107 |
108 |
109 |
110 | # 当设置autouse为True时,
111 | # 在一个session内的所有的test都会自动调用这个fixture
112 | # @pytest.fixture(autouse=True)
113 | # def ios_driver_setup(request):
114 | # logger.info("ios自动化测试开始!")
115 | # request.instance.driver = Driver().init_ios_driver(ios_device_name)
116 | # logger.info("driver初始化")
117 | # ios_allow(request.instance.driver)
118 | # def driver_teardown():
119 | # logger.info("ios自动化测试结束!")
120 | # request.instance.driver.stop_app()
121 | # request.addfinalizer(driver_teardown)
122 |
123 |
124 | def ios_allow(driver):
125 | elem = driver(name="允许")
126 | if elem.exists:
127 | elem.click()
128 | if elem.exists:
129 | elem.click()
130 | elem = driver(xpath='//XCUIElementTypeButton[@name="upgradeClose"]')
131 | if elem.exists:
132 | elem.click()
133 | logger.info("关闭升级")
134 |
--------------------------------------------------------------------------------
/android/module/base.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | """
5 | @Author : xinxi
6 | @Time : 2018/12/5 18:34
7 | @describe: 对元素基本操作封装
8 | """
9 |
10 | import pytest,time,os,re,yaml,json,sys,xmltodict
11 | import allure
12 | from allure_commons._allure import attach
13 | # from allure.constants import AttachmentType
14 | from allure_commons.types import AttachmentType
15 | import subprocess,base64
16 | sys.path.append("..")
17 | reload(sys)
18 | sys.setdefaultencoding("utf-8")
19 | from tools.loggers import JFMlogging
20 | from config import *
21 | logger = JFMlogging().getloger()
22 |
23 |
24 |
25 | class Base():
26 |
27 | def __init__(self, driver):
28 | self.d = driver
29 | self.width = self.get_windowsize()[0]
30 | self.height = self.get_windowsize()[1]
31 |
32 | def click(self, element, logtext):
33 | '''
34 | 元素点击
35 | driver: 操作对象
36 | element:元素名称
37 | logtext:打印log的文案
38 | xpath使用方法
39 | 1.包含
40 | d.xpath(u"//android.widget.TextView[contains(@text,'购买 ¥')]").click()
41 | 2.全匹配
42 | d.xpath(u"//android.widget.TextView[@text='购买 ¥4.99']").click()
43 | 3.匹配开始字符
44 | d.xpath(u"//android.widget.TextView[starts-with(@text,'购买 ¥')]").click()
45 | :return:
46 | '''
47 | if str(element).startswith("com"):
48 | self.d(resourceId=element).click()
49 | elif re.findall("//", str(element)):
50 | self.d.xpath(element).click()
51 | else:
52 | self.d(text=element).click()
53 | logger.info("点击元素:{}".format(logtext))
54 |
55 |
56 |
57 | def send_keys(self,element,sendtext,logtext):
58 | '''
59 | 文本输入
60 | driver: 操作对象
61 | sendtext:输入的文案
62 | element:元素名称
63 | logtext:打印log的文案
64 | :return:
65 | '''
66 | self.d(resourceId=element).set_text(sendtext)
67 | logger.info(logtext)
68 |
69 |
70 | def click_web(self,element,logtext):
71 | '''
72 | 通过文字,点击web页面中的元素
73 | element=u"文化艺术"
74 | :return:
75 | '''
76 |
77 | self.d(description=element).click()
78 | logger.info("点击元素:{}".format(logtext))
79 |
80 |
81 | def double_click(self,x,y,time=0.5):
82 | '''
83 | 双击
84 | :return:
85 | '''
86 | self.d.double_click(x, y,time)
87 | logger.info("点击坐标:{},{}".format(x,y))
88 |
89 | def get_windowsize(self):
90 | '''
91 | 获取屏幕尺寸
92 | :return:
93 | '''
94 | window_size = self.d.window_size()
95 | width = int(window_size[0])
96 | height = int(window_size[1])
97 | return width, height
98 |
99 | def swip_down(self, time=0.5):
100 | '''
101 | 向上滑动
102 | :return:
103 | '''
104 | self.d.drag(self.width / 2, self.height * 3 / 4, self.width / 2, self.height / 4, time)
105 | logger.info("向下滑动")
106 |
107 |
108 | def swip_up(self, time=0.5):
109 | '''
110 | 向下滑动
111 | :return:
112 | '''
113 | self.d.drag(self.width / 2, self.height / 4, self.width / 2, self.height * 3 / 4, time)
114 | logger.info("向上滑动")
115 |
116 |
117 | def swip_down_element(self,element):
118 | '''
119 | 向下滑动到某个元素
120 | :return:
121 | '''
122 | is_find = False
123 | max_count = 5
124 | while max_count > 0:
125 | if self.find_elements(element):
126 | logger.info("向下滑动到:{}".format(element))
127 | else:
128 | self.swip_down()
129 | max_count -= 1;
130 | logger.info("向下滑动")
131 |
132 |
133 | def back(self):
134 | '''
135 | 模拟物理键返回
136 | :return:
137 | '''
138 | self.d.press("back")
139 | logger.info("点击返回")
140 |
141 |
142 | def find_elements(self,element,timeout=5):
143 | '''
144 | 查找元素是否存在当前页面
145 | :return:
146 | '''
147 | is_exited = False
148 | try:
149 | while timeout > 0:
150 | xml = self.d.dump_hierarchy()
151 | if re.findall(element,xml):
152 | is_exited = True
153 | logger.info("查询到{}".format(element))
154 | break
155 | else:
156 | timeout -=1
157 | except Exception as e:
158 | logger.info("{}查找失败!{}".format(element,e))
159 | finally:
160 | return is_exited
161 |
162 |
163 | # def assert_exited(self, element):
164 | # '''
165 | # 断言当前页面存在要查找的元素,存在则判断成功
166 | # :param driver:
167 | # :return:
168 | # '''
169 | # if self.find_elements(element):
170 | # logger.info("断言{}元素存在,成功!".format(element))
171 | # assert True
172 | # else:
173 | # logger.info("断言{}元素存在,失败!".format(element))
174 | # assert False
175 |
176 | def assert_exited(self, element):
177 | '''
178 | 断言当前页面存在要查找的元素,存在则判断成功
179 | :param driver:
180 | :return:
181 | '''
182 | assert self.find_elements(element) == True,"断言{}元素存在,失败!".format(element)
183 | logger.info("断言{}元素存在,成功!".format(element))
--------------------------------------------------------------------------------
/myreport/history/history.json:
--------------------------------------------------------------------------------
1 | {
2 | "49f47524c5450a947c2202f388db6524" : {
3 | "statistic" : {
4 | "failed" : 0,
5 | "broken" : 0,
6 | "skipped" : 0,
7 | "passed" : 1,
8 | "unknown" : 0,
9 | "total" : 1
10 | },
11 | "items" : [ {
12 | "uid" : "ec71b6f590f41169",
13 | "status" : "passed",
14 | "time" : {
15 | "start" : 1544454671474,
16 | "stop" : 1544454677965,
17 | "duration" : 6491
18 | }
19 | } ]
20 | },
21 | "efd11c894cdc97fcce498aa752d4c273" : {
22 | "statistic" : {
23 | "failed" : 0,
24 | "broken" : 0,
25 | "skipped" : 0,
26 | "passed" : 1,
27 | "unknown" : 0,
28 | "total" : 1
29 | },
30 | "items" : [ {
31 | "uid" : "1105852210cd524a",
32 | "status" : "passed",
33 | "time" : {
34 | "start" : 1544454547036,
35 | "stop" : 1544454555209,
36 | "duration" : 8173
37 | }
38 | } ]
39 | },
40 | "8cb30af1e519194066c71f5bc7ea6567" : {
41 | "statistic" : {
42 | "failed" : 0,
43 | "broken" : 0,
44 | "skipped" : 0,
45 | "passed" : 1,
46 | "unknown" : 0,
47 | "total" : 1
48 | },
49 | "items" : [ {
50 | "uid" : "acd752a20bc3e730",
51 | "status" : "passed",
52 | "time" : {
53 | "start" : 1544454497681,
54 | "stop" : 1544454505900,
55 | "duration" : 8219
56 | }
57 | } ]
58 | },
59 | "6f2936a77e3a16a5ed062c23669572fe" : {
60 | "statistic" : {
61 | "failed" : 0,
62 | "broken" : 0,
63 | "skipped" : 0,
64 | "passed" : 1,
65 | "unknown" : 0,
66 | "total" : 1
67 | },
68 | "items" : [ {
69 | "uid" : "c9921c819a865eed",
70 | "status" : "passed",
71 | "time" : {
72 | "start" : 1544454538908,
73 | "stop" : 1544454546942,
74 | "duration" : 8034
75 | }
76 | } ]
77 | },
78 | "43ed2f544696eb56bfa218634033ed73" : {
79 | "statistic" : {
80 | "failed" : 0,
81 | "broken" : 0,
82 | "skipped" : 0,
83 | "passed" : 1,
84 | "unknown" : 0,
85 | "total" : 1
86 | },
87 | "items" : [ {
88 | "uid" : "84cc77f3b32d4eaa",
89 | "status" : "passed",
90 | "time" : {
91 | "start" : 1544454555321,
92 | "stop" : 1544454561923,
93 | "duration" : 6602
94 | }
95 | } ]
96 | },
97 | "30a5dd955d40b0a49e74a47d2620854e" : {
98 | "statistic" : {
99 | "failed" : 0,
100 | "broken" : 0,
101 | "skipped" : 0,
102 | "passed" : 1,
103 | "unknown" : 0,
104 | "total" : 1
105 | },
106 | "items" : [ {
107 | "uid" : "c09d8480754afc3e",
108 | "status" : "passed",
109 | "time" : {
110 | "start" : 1544454664602,
111 | "stop" : 1544454671355,
112 | "duration" : 6753
113 | }
114 | } ]
115 | },
116 | "cf6e7fac3712db30f5a09d7a38b6bbbd" : {
117 | "statistic" : {
118 | "failed" : 0,
119 | "broken" : 0,
120 | "skipped" : 0,
121 | "passed" : 1,
122 | "unknown" : 0,
123 | "total" : 1
124 | },
125 | "items" : [ {
126 | "uid" : "7cc7dcc35fe6a04b",
127 | "status" : "passed",
128 | "time" : {
129 | "start" : 1544454530818,
130 | "stop" : 1544454538795,
131 | "duration" : 7977
132 | }
133 | } ]
134 | },
135 | "e4edfefa98b163dbb1d9d2e648335ca0" : {
136 | "statistic" : {
137 | "failed" : 0,
138 | "broken" : 0,
139 | "skipped" : 0,
140 | "passed" : 1,
141 | "unknown" : 0,
142 | "total" : 1
143 | },
144 | "items" : [ {
145 | "uid" : "5860b241cf5d2e1b",
146 | "status" : "passed",
147 | "time" : {
148 | "start" : 1544454514222,
149 | "stop" : 1544454522470,
150 | "duration" : 8248
151 | }
152 | } ]
153 | },
154 | "bb3a0849ab92ec7d1e3c26074fa8baeb" : {
155 | "statistic" : {
156 | "failed" : 0,
157 | "broken" : 0,
158 | "skipped" : 0,
159 | "passed" : 1,
160 | "unknown" : 0,
161 | "total" : 1
162 | },
163 | "items" : [ {
164 | "uid" : "d821399e32050989",
165 | "status" : "passed",
166 | "time" : {
167 | "start" : 1544454522583,
168 | "stop" : 1544454530698,
169 | "duration" : 8115
170 | }
171 | } ]
172 | },
173 | "424c0eb3ed7a7edf26c4c15660404a84" : {
174 | "statistic" : {
175 | "failed" : 0,
176 | "broken" : 0,
177 | "skipped" : 0,
178 | "passed" : 1,
179 | "unknown" : 0,
180 | "total" : 1
181 | },
182 | "items" : [ {
183 | "uid" : "d482c6b69815b49b",
184 | "status" : "passed",
185 | "time" : {
186 | "start" : 1544454506067,
187 | "stop" : 1544454514120,
188 | "duration" : 8053
189 | }
190 | } ]
191 | },
192 | "497a1938a0520647634d7c6a3bc0b5e1" : {
193 | "statistic" : {
194 | "failed" : 0,
195 | "broken" : 0,
196 | "skipped" : 0,
197 | "passed" : 1,
198 | "unknown" : 0,
199 | "total" : 1
200 | },
201 | "items" : [ {
202 | "uid" : "531c86dbca320b6",
203 | "status" : "passed",
204 | "time" : {
205 | "start" : 1544459544236,
206 | "stop" : 1544459557293,
207 | "duration" : 13057
208 | }
209 | } ]
210 | },
211 | "f9578f93a985c036800afaca57e6e257" : {
212 | "statistic" : {
213 | "failed" : 1,
214 | "broken" : 0,
215 | "skipped" : 0,
216 | "passed" : 0,
217 | "unknown" : 0,
218 | "total" : 1
219 | },
220 | "items" : [ {
221 | "uid" : "f7baf1f4205bdcad",
222 | "status" : "failed",
223 | "statusDetails" : "AssertionError: ",
224 | "time" : {
225 | "start" : 1544454568380,
226 | "stop" : 1544454657131,
227 | "duration" : 88751
228 | }
229 | } ]
230 | },
231 | "3e73226834e78092a3727f3ebe85eada" : {
232 | "statistic" : {
233 | "failed" : 0,
234 | "broken" : 0,
235 | "skipped" : 0,
236 | "passed" : 1,
237 | "unknown" : 0,
238 | "total" : 1
239 | },
240 | "items" : [ {
241 | "uid" : "10cc6bed2ef232d2",
242 | "status" : "passed",
243 | "time" : {
244 | "start" : 1544454562064,
245 | "stop" : 1544454568217,
246 | "duration" : 6153
247 | }
248 | } ]
249 | },
250 | "59d464324fac86733c83dc1cdb4d9cfe" : {
251 | "statistic" : {
252 | "failed" : 0,
253 | "broken" : 0,
254 | "skipped" : 0,
255 | "passed" : 1,
256 | "unknown" : 0,
257 | "total" : 1
258 | },
259 | "items" : [ {
260 | "uid" : "a942a48fbd3c1a52",
261 | "status" : "passed",
262 | "time" : {
263 | "start" : 1544454658069,
264 | "stop" : 1544454664443,
265 | "duration" : 6374
266 | }
267 | } ]
268 | },
269 | "7740b77787667323ebdec098f8ecfa0b" : {
270 | "statistic" : {
271 | "failed" : 1,
272 | "broken" : 0,
273 | "skipped" : 0,
274 | "passed" : 0,
275 | "unknown" : 0,
276 | "total" : 1
277 | },
278 | "items" : [ {
279 | "uid" : "8f37ed817438dd60",
280 | "status" : "failed",
281 | "statusDetails" : "UiObjectNotFoundError: -32002 Client error: <> data: , method: None",
282 | "time" : {
283 | "start" : 1544454411191,
284 | "stop" : 1544454496904,
285 | "duration" : 85713
286 | }
287 | } ]
288 | }
289 | }
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/Project_Default.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/logs/system.log:
--------------------------------------------------------------------------------
1 | [2018-12-11 00:32:24,238] [INFO] [xinxideMacBook-Pro.local][conftest.py - line:27] 自动化测试开始!
2 | [2018-12-11 00:32:24,238] [INFO] [xinxideMacBook-Pro.local][driver.py - line:24] a3f8ca3a
3 | [2018-12-11 00:32:24,383] [INFO] [xinxideMacBook-Pro.local][driver.py - line:33] 连接设备:a3f8ca3a
4 | [2018-12-11 00:32:24,384] [INFO] [xinxideMacBook-Pro.local][conftest.py - line:29] driver初始化
5 | [2018-12-11 00:32:37,289] [INFO] [xinxideMacBook-Pro.local][base.py - line:53] 点击元素:发现
6 | [2018-12-11 00:32:37,290] [INFO] [xinxideMacBook-Pro.local][test_find.py - line:26] 初始化首页模块
7 | [2018-12-11 00:32:37,292] [INFO] [xinxideMacBook-Pro.local][test_find.py - line:32] 测试发现
8 | [2018-12-11 00:32:37,294] [INFO] [xinxideMacBook-Pro.local][test_find.py - line:28] 结束首页模块
9 | [2018-12-11 00:32:37,294] [INFO] [xinxideMacBook-Pro.local][conftest.py - line:35] 自动化测试结束!
10 | [2018-12-11 12:00:30,575] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
11 | [2018-12-11 12:00:30,576] [INFO] [bogon][driver.py - line:24] a3f8ca3a
12 | [2018-12-11 12:00:30,913] [INFO] [bogon][driver.py - line:33] 连接设备:a3f8ca3a
13 | [2018-12-11 12:00:30,914] [INFO] [bogon][conftest.py - line:29] driver初始化
14 | [2018-12-11 12:00:40,183] [INFO] [bogon][base.py - line:53] 点击元素:发现
15 | [2018-12-11 12:00:40,184] [INFO] [bogon][test_find.py - line:26] 初始化首页模块
16 | [2018-12-11 12:00:40,187] [INFO] [bogon][test_find.py - line:32] 测试发现
17 | [2018-12-11 12:00:40,189] [INFO] [bogon][test_find.py - line:28] 结束首页模块
18 | [2018-12-11 12:00:40,189] [INFO] [bogon][conftest.py - line:35] 自动化测试结束!
19 | [2018-12-11 12:00:51,308] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
20 | [2018-12-11 12:00:51,308] [INFO] [bogon][driver.py - line:24] a3f8ca3a
21 | [2018-12-11 12:00:51,453] [INFO] [bogon][driver.py - line:33] 连接设备:a3f8ca3a
22 | [2018-12-11 12:00:51,454] [INFO] [bogon][conftest.py - line:29] driver初始化
23 | [2018-12-11 12:00:58,687] [INFO] [bogon][base.py - line:53] 点击元素:发现
24 | [2018-12-11 12:00:58,690] [INFO] [bogon][test_find.py - line:26] 初始化首页模块
25 | [2018-12-11 12:00:58,692] [INFO] [bogon][test_find.py - line:32] 测试发现
26 | [2018-12-11 12:00:58,694] [INFO] [bogon][test_find.py - line:28] 结束首页模块
27 | [2018-12-11 12:00:58,694] [INFO] [bogon][conftest.py - line:35] 自动化测试结束!
28 | [2018-12-11 12:13:02,819] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
29 | [2018-12-11 12:13:02,819] [INFO] [bogon][driver.py - line:24] a3f8ca3a
30 | [2018-12-11 12:13:03,014] [INFO] [bogon][driver.py - line:33] 连接设备:a3f8ca3a
31 | [2018-12-11 12:13:03,014] [INFO] [bogon][conftest.py - line:29] driver初始化
32 | [2018-12-11 12:13:12,088] [INFO] [bogon][base.py - line:53] 点击元素:发现
33 | [2018-12-11 12:13:12,089] [INFO] [bogon][test_find.py - line:26] 初始化首页模块
34 | [2018-12-11 12:13:12,092] [INFO] [bogon][test_find.py - line:32] 测试发现
35 | [2018-12-11 12:13:12,093] [INFO] [bogon][test_find.py - line:28] 结束首页模块
36 | [2018-12-11 12:13:12,094] [INFO] [bogon][conftest.py - line:35] 自动化测试结束!
37 | [2018-12-11 12:13:43,903] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
38 | [2018-12-11 12:13:43,903] [INFO] [bogon][driver.py - line:24] a3f8ca3a
39 | [2018-12-11 12:13:44,067] [INFO] [bogon][driver.py - line:33] 连接设备:a3f8ca3a
40 | [2018-12-11 12:13:44,068] [INFO] [bogon][conftest.py - line:29] driver初始化
41 | [2018-12-11 12:13:48,027] [INFO] [bogon][conftest.py - line:35] 自动化测试结束!
42 | [2018-12-11 12:14:26,557] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
43 | [2018-12-11 12:14:26,557] [INFO] [bogon][driver.py - line:24] a3f8ca3a
44 | [2018-12-11 12:14:26,707] [INFO] [bogon][driver.py - line:33] 连接设备:a3f8ca3a
45 | [2018-12-11 12:14:26,708] [INFO] [bogon][conftest.py - line:29] driver初始化
46 | [2018-12-11 12:14:30,693] [INFO] [bogon][test_find.py - line:35] 测试发现1
47 | [2018-12-11 12:14:30,695] [INFO] [bogon][conftest.py - line:35] 自动化测试结束!
48 | [2018-12-11 12:15:02,733] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
49 | [2018-12-11 12:15:02,734] [INFO] [bogon][driver.py - line:24] a3f8ca3a
50 | [2018-12-11 12:15:02,887] [INFO] [bogon][driver.py - line:33] 连接设备:a3f8ca3a
51 | [2018-12-11 12:15:02,888] [INFO] [bogon][conftest.py - line:29] driver初始化
52 | [2018-12-11 12:15:06,863] [INFO] [bogon][test_find.py - line:35] 测试发现1
53 | [2018-12-11 12:15:06,865] [INFO] [bogon][conftest.py - line:35] 自动化测试结束!
54 | [2018-12-11 12:16:55,432] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
55 | [2018-12-11 12:16:55,432] [INFO] [bogon][driver.py - line:24] a3f8ca3a
56 | [2018-12-11 12:16:55,577] [INFO] [bogon][driver.py - line:33] 连接设备:a3f8ca3a
57 | [2018-12-11 12:16:55,578] [INFO] [bogon][conftest.py - line:29] driver初始化
58 | [2018-12-11 12:16:59,708] [INFO] [bogon][test_find.py - line:35] 测试发现1
59 | [2018-12-11 12:16:59,709] [INFO] [bogon][conftest.py - line:35] 自动化测试结束!
60 | [2018-12-11 13:16:22,954] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
61 | [2018-12-11 13:16:22,955] [INFO] [bogon][driver.py - line:24] a3f8ca3a
62 | [2018-12-11 13:16:23,282] [INFO] [bogon][driver.py - line:33] 连接设备:a3f8ca3a
63 | [2018-12-11 13:16:23,283] [INFO] [bogon][conftest.py - line:29] driver初始化
64 | [2018-12-11 13:16:27,875] [INFO] [bogon][test_find.py - line:38] 测试发现2
65 | [2018-12-11 13:16:27,877] [INFO] [bogon][conftest.py - line:35] 自动化测试结束!
66 | [2018-12-11 13:16:28,006] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
67 | [2018-12-11 13:16:28,006] [INFO] [bogon][driver.py - line:24] a3f8ca3a
68 | [2018-12-11 13:16:28,152] [INFO] [bogon][driver.py - line:33] 连接设备:a3f8ca3a
69 | [2018-12-11 13:16:28,153] [INFO] [bogon][conftest.py - line:29] driver初始化
70 | [2018-12-11 13:16:32,023] [INFO] [bogon][test_find.py - line:35] 测试发现1
71 | [2018-12-11 13:16:32,025] [INFO] [bogon][conftest.py - line:35] 自动化测试结束!
72 | [2018-12-11 13:18:33,470] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
73 | [2018-12-11 13:18:33,470] [INFO] [bogon][driver.py - line:24] a3f8ca3a
74 | [2018-12-11 13:18:33,632] [INFO] [bogon][driver.py - line:33] 连接设备:a3f8ca3a
75 | [2018-12-11 13:18:33,633] [INFO] [bogon][conftest.py - line:29] driver初始化
76 | [2018-12-11 13:18:37,554] [INFO] [bogon][test_find.py - line:38] 测试发现2
77 | [2018-12-11 13:18:37,555] [INFO] [bogon][conftest.py - line:35] 自动化测试结束!
78 | [2018-12-11 13:18:37,811] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
79 | [2018-12-11 13:18:37,812] [INFO] [bogon][driver.py - line:24] a3f8ca3a
80 | [2018-12-11 13:18:37,932] [INFO] [bogon][driver.py - line:33] 连接设备:a3f8ca3a
81 | [2018-12-11 13:18:37,933] [INFO] [bogon][conftest.py - line:29] driver初始化
82 | [2018-12-11 13:18:41,809] [INFO] [bogon][test_find.py - line:35] 测试发现1
83 | [2018-12-11 13:18:41,810] [INFO] [bogon][conftest.py - line:35] 自动化测试结束!
84 | [2018-12-11 14:02:24,978] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
85 | [2018-12-11 14:02:24,979] [INFO] [bogon][driver.py - line:24] a3f8ca3a
86 | [2018-12-11 14:02:25,219] [INFO] [bogon][driver.py - line:33] 连接设备:a3f8ca3a
87 | [2018-12-11 14:02:25,220] [INFO] [bogon][conftest.py - line:29] driver初始化
88 | [2018-12-11 14:02:44,966] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
89 | [2018-12-11 14:03:29,522] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
90 | [2018-12-11 14:03:29,522] [INFO] [bogon][driver.py - line:24] a3f8ca3a
91 | [2018-12-11 14:03:29,662] [INFO] [bogon][driver.py - line:33] 连接设备:a3f8ca3a
92 | [2018-12-11 14:03:29,663] [INFO] [bogon][conftest.py - line:29] driver初始化
93 | [2018-12-11 14:03:49,194] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
94 | [2018-12-11 14:04:31,280] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
95 | [2018-12-11 14:04:31,280] [INFO] [bogon][driver.py - line:24] a3f8ca3a
96 | [2018-12-11 14:04:31,413] [INFO] [bogon][driver.py - line:33] 连接设备:a3f8ca3a
97 | [2018-12-11 14:04:31,414] [INFO] [bogon][conftest.py - line:29] driver初始化
98 | [2018-12-11 14:04:51,062] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
99 | [2018-12-11 14:05:44,107] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
100 | [2018-12-11 14:05:44,107] [INFO] [bogon][driver.py - line:24] a3f8ca3a
101 | [2018-12-11 14:05:44,243] [INFO] [bogon][driver.py - line:33] 连接设备:a3f8ca3a
102 | [2018-12-11 14:05:44,244] [INFO] [bogon][conftest.py - line:29] driver初始化
103 | [2018-12-11 14:05:59,219] [INFO] [bogon][base.py - line:53] 点击元素:发现
104 | [2018-12-11 14:05:59,220] [INFO] [bogon][test_find.py - line:26] 初始化首页模块
105 | [2018-12-11 14:05:59,223] [INFO] [bogon][test_find.py - line:36] 测试发现
106 | [2018-12-11 14:05:59,224] [INFO] [bogon][test_find.py - line:28] 结束首页模块
107 | [2018-12-11 14:05:59,224] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
108 | [2018-12-11 15:19:03,678] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
109 | [2018-12-11 15:19:03,678] [INFO] [bogon][driver.py - line:24] a3f8ca3a
110 | [2018-12-11 15:19:03,679] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
111 | [2018-12-11 15:19:03,680] [INFO] [bogon][conftest.py - line:29] driver初始化
112 | [2018-12-11 15:19:15,671] [INFO] [bogon][base.py - line:53] 点击元素:发现
113 | [2018-12-11 15:19:15,672] [INFO] [bogon][test_find.py - line:26] 初始化首页模块
114 | [2018-12-11 15:19:15,673] [INFO] [bogon][test_find.py - line:36] 测试发现
115 | [2018-12-11 15:19:15,675] [INFO] [bogon][test_find.py - line:28] 结束首页模块
116 | [2018-12-11 15:19:15,675] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
117 | [2018-12-11 15:21:37,556] [INFO] [bogon][run.py - line:20] 初始化运行环境!
118 | [2018-12-11 15:21:39,111] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
119 | [2018-12-11 15:21:39,111] [INFO] [bogon][driver.py - line:24] a3f8ca3a
120 | [2018-12-11 15:21:39,112] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
121 | [2018-12-11 15:21:39,112] [INFO] [bogon][conftest.py - line:29] driver初始化
122 | [2018-12-11 15:21:52,963] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
123 | [2018-12-11 15:22:31,487] [INFO] [bogon][run.py - line:20] 初始化运行环境!
124 | [2018-12-11 15:22:33,001] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
125 | [2018-12-11 15:22:33,002] [INFO] [bogon][driver.py - line:24] a3f8ca3a
126 | [2018-12-11 15:22:33,003] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
127 | [2018-12-11 15:22:33,003] [INFO] [bogon][conftest.py - line:29] driver初始化
128 | [2018-12-11 15:22:41,080] [INFO] [bogon][base.py - line:53] 点击元素:我的
129 | [2018-12-11 15:22:41,209] [INFO] [bogon][test_login.py - line:27] 初始化登录模块
130 | [2018-12-11 15:22:42,919] [INFO] [bogon][base.py - line:53] 点击元素:头像
131 | [2018-12-11 15:22:43,350] [INFO] [bogon][base.py - line:67] 账号
132 | [2018-12-11 15:22:44,076] [INFO] [bogon][base.py - line:67] 密码
133 | [2018-12-11 15:22:45,599] [INFO] [bogon][base.py - line:53] 点击元素:登录
134 | [2018-12-11 15:22:47,048] [INFO] [bogon][base.py - line:173] 断言我的发布元素存在,失败!
135 | [2018-12-11 15:22:47,120] [INFO] [bogon][test_login.py - line:29] 结束登录模块
136 | [2018-12-11 15:22:47,120] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
137 | [2018-12-11 15:22:49,950] [INFO] [bogon][run.py - line:27] 报告地址:/Users/xinxi/PycharmProjects/atxdemo/reports/index.html
138 | [2018-12-11 15:23:30,151] [INFO] [bogon][run.py - line:20] 初始化运行环境!
139 | [2018-12-11 15:23:31,709] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
140 | [2018-12-11 15:23:31,709] [INFO] [bogon][driver.py - line:24] a3f8ca3a
141 | [2018-12-11 15:23:31,710] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
142 | [2018-12-11 15:23:31,710] [INFO] [bogon][conftest.py - line:29] driver初始化
143 | [2018-12-11 15:23:41,195] [INFO] [bogon][base.py - line:53] 点击元素:消息
144 | [2018-12-11 15:23:41,428] [INFO] [bogon][test_news.py - line:24] 初始化消息模块
145 | [2018-12-11 15:23:43,136] [INFO] [bogon][base.py - line:53] 点击元素:精选活动
146 | [2018-12-11 15:23:43,138] [INFO] [bogon][test_news.py - line:26] 结束消息模块
147 | [2018-12-11 15:23:43,138] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
148 | [2018-12-11 15:23:43,379] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
149 | [2018-12-11 15:23:43,379] [INFO] [bogon][driver.py - line:24] a3f8ca3a
150 | [2018-12-11 15:23:43,380] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
151 | [2018-12-11 15:23:43,380] [INFO] [bogon][conftest.py - line:29] driver初始化
152 | [2018-12-11 15:23:50,718] [INFO] [bogon][base.py - line:53] 点击元素:发布
153 | [2018-12-11 15:23:50,970] [INFO] [bogon][test_push.py - line:35] 初始化发布模块
154 | [2018-12-11 15:23:52,550] [INFO] [bogon][base.py - line:53] 点击元素:装修建材
155 | [2018-12-11 15:23:52,778] [INFO] [bogon][base.py - line:139] 点击返回
156 | [2018-12-11 15:23:52,780] [INFO] [bogon][test_push.py - line:37] 结束发布模块
157 | [2018-12-11 15:23:52,780] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
158 | [2018-12-11 15:23:53,099] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
159 | [2018-12-11 15:23:53,099] [INFO] [bogon][driver.py - line:24] a3f8ca3a
160 | [2018-12-11 15:23:53,099] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
161 | [2018-12-11 15:23:53,099] [INFO] [bogon][conftest.py - line:29] driver初始化
162 | [2018-12-11 15:24:02,184] [INFO] [bogon][base.py - line:53] 点击元素:发布
163 | [2018-12-11 15:24:02,385] [INFO] [bogon][test_push.py - line:35] 初始化发布模块
164 | [2018-12-11 15:24:04,030] [INFO] [bogon][base.py - line:53] 点击元素:房产
165 | [2018-12-11 15:24:04,247] [INFO] [bogon][base.py - line:139] 点击返回
166 | [2018-12-11 15:24:04,248] [INFO] [bogon][test_push.py - line:37] 结束发布模块
167 | [2018-12-11 15:24:04,249] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
168 | [2018-12-11 15:24:04,426] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
169 | [2018-12-11 15:24:04,427] [INFO] [bogon][driver.py - line:24] a3f8ca3a
170 | [2018-12-11 15:24:04,428] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
171 | [2018-12-11 15:24:04,428] [INFO] [bogon][conftest.py - line:29] driver初始化
172 | [2018-12-11 15:24:12,942] [INFO] [bogon][base.py - line:53] 点击元素:发布
173 | [2018-12-11 15:24:13,121] [INFO] [bogon][test_push.py - line:35] 初始化发布模块
174 | [2018-12-11 15:24:14,677] [INFO] [bogon][base.py - line:53] 点击元素:本地服务
175 | [2018-12-11 15:24:14,896] [INFO] [bogon][base.py - line:139] 点击返回
176 | [2018-12-11 15:24:14,898] [INFO] [bogon][test_push.py - line:37] 结束发布模块
177 | [2018-12-11 15:24:14,898] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
178 | [2018-12-11 15:24:15,033] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
179 | [2018-12-11 15:24:15,034] [INFO] [bogon][driver.py - line:24] a3f8ca3a
180 | [2018-12-11 15:24:15,035] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
181 | [2018-12-11 15:24:15,035] [INFO] [bogon][conftest.py - line:29] driver初始化
182 | [2018-12-11 15:24:23,287] [INFO] [bogon][base.py - line:53] 点击元素:发布
183 | [2018-12-11 15:24:23,434] [INFO] [bogon][test_push.py - line:35] 初始化发布模块
184 | [2018-12-11 15:24:25,013] [INFO] [bogon][base.py - line:53] 点击元素:汽车服务
185 | [2018-12-11 15:24:25,247] [INFO] [bogon][base.py - line:139] 点击返回
186 | [2018-12-11 15:24:25,249] [INFO] [bogon][test_push.py - line:37] 结束发布模块
187 | [2018-12-11 15:24:25,249] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
188 | [2018-12-11 15:24:25,392] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
189 | [2018-12-11 15:24:25,393] [INFO] [bogon][driver.py - line:24] a3f8ca3a
190 | [2018-12-11 15:24:25,393] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
191 | [2018-12-11 15:24:25,393] [INFO] [bogon][conftest.py - line:29] driver初始化
192 | [2018-12-11 15:24:34,137] [INFO] [bogon][base.py - line:53] 点击元素:发布
193 | [2018-12-11 15:24:34,317] [INFO] [bogon][test_push.py - line:35] 初始化发布模块
194 | [2018-12-11 15:24:35,942] [INFO] [bogon][base.py - line:53] 点击元素:二手车
195 | [2018-12-11 15:24:36,195] [INFO] [bogon][base.py - line:139] 点击返回
196 | [2018-12-11 15:24:36,195] [INFO] [bogon][test_push.py - line:37] 结束发布模块
197 | [2018-12-11 15:24:36,196] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
198 | [2018-12-11 15:24:36,510] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
199 | [2018-12-11 15:24:36,510] [INFO] [bogon][driver.py - line:24] a3f8ca3a
200 | [2018-12-11 15:24:36,511] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
201 | [2018-12-11 15:24:36,511] [INFO] [bogon][conftest.py - line:29] driver初始化
202 | [2018-12-11 15:24:44,950] [INFO] [bogon][base.py - line:53] 点击元素:发布
203 | [2018-12-11 15:24:45,310] [INFO] [bogon][test_push.py - line:35] 初始化发布模块
204 | [2018-12-11 15:24:46,834] [INFO] [bogon][base.py - line:53] 点击元素:家政服务
205 | [2018-12-11 15:24:47,057] [INFO] [bogon][base.py - line:139] 点击返回
206 | [2018-12-11 15:24:47,058] [INFO] [bogon][test_push.py - line:37] 结束发布模块
207 | [2018-12-11 15:24:47,058] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
208 | [2018-12-11 15:24:47,265] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
209 | [2018-12-11 15:24:47,266] [INFO] [bogon][driver.py - line:24] a3f8ca3a
210 | [2018-12-11 15:24:47,266] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
211 | [2018-12-11 15:24:47,266] [INFO] [bogon][conftest.py - line:29] driver初始化
212 | [2018-12-11 15:24:56,225] [INFO] [bogon][base.py - line:53] 点击元素:发现
213 | [2018-12-11 15:24:56,225] [INFO] [bogon][test_find.py - line:26] 初始化首页模块
214 | [2018-12-11 15:24:56,227] [INFO] [bogon][test_find.py - line:36] 测试发现
215 | [2018-12-11 15:24:56,228] [INFO] [bogon][test_find.py - line:28] 结束首页模块
216 | [2018-12-11 15:24:56,229] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
217 | [2018-12-11 15:24:56,396] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
218 | [2018-12-11 15:24:56,396] [INFO] [bogon][driver.py - line:24] a3f8ca3a
219 | [2018-12-11 15:24:56,397] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
220 | [2018-12-11 15:24:56,397] [INFO] [bogon][conftest.py - line:29] driver初始化
221 | [2018-12-11 15:25:05,878] [INFO] [bogon][base.py - line:53] 点击元素:我的
222 | [2018-12-11 15:25:06,096] [INFO] [bogon][test_login.py - line:27] 初始化登录模块
223 | [2018-12-11 15:25:07,720] [INFO] [bogon][base.py - line:53] 点击元素:头像
224 | [2018-12-11 15:25:22,989] [INFO] [bogon][test_login.py - line:29] 结束登录模块
225 | [2018-12-11 15:25:22,990] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
226 | [2018-12-11 15:25:23,207] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
227 | [2018-12-11 15:25:23,207] [INFO] [bogon][driver.py - line:24] a3f8ca3a
228 | [2018-12-11 15:25:23,208] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
229 | [2018-12-11 15:25:23,208] [INFO] [bogon][conftest.py - line:29] driver初始化
230 | [2018-12-11 15:25:43,202] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
231 | [2018-12-11 15:25:43,385] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
232 | [2018-12-11 15:25:43,385] [INFO] [bogon][driver.py - line:24] a3f8ca3a
233 | [2018-12-11 15:25:43,385] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
234 | [2018-12-11 15:25:43,386] [INFO] [bogon][conftest.py - line:29] driver初始化
235 | [2018-12-11 15:25:52,798] [INFO] [bogon][base.py - line:53] 点击元素:我的
236 | [2018-12-11 15:25:52,930] [INFO] [bogon][test_login.py - line:27] 初始化登录模块
237 | [2018-12-11 15:25:54,727] [INFO] [bogon][base.py - line:53] 点击元素:头像
238 | [2018-12-11 15:26:10,971] [INFO] [bogon][test_login.py - line:29] 结束登录模块
239 | [2018-12-11 15:26:10,972] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
240 | [2018-12-11 15:26:11,202] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
241 | [2018-12-11 15:26:11,203] [INFO] [bogon][driver.py - line:24] a3f8ca3a
242 | [2018-12-11 15:26:11,204] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
243 | [2018-12-11 15:26:11,205] [INFO] [bogon][conftest.py - line:29] driver初始化
244 | [2018-12-11 15:26:15,451] [INFO] [bogon][test_home.py - line:24] 初始化首页模块
245 | [2018-12-11 15:26:18,971] [INFO] [bogon][base.py - line:105] 向下滑动
246 | [2018-12-11 15:26:18,971] [INFO] [bogon][base.py - line:130] 向下滑动
247 | [2018-12-11 15:26:24,849] [INFO] [bogon][base.py - line:105] 向下滑动
248 | [2018-12-11 15:26:24,851] [INFO] [bogon][base.py - line:130] 向下滑动
249 | [2018-12-11 15:26:30,072] [INFO] [bogon][base.py - line:105] 向下滑动
250 | [2018-12-11 15:26:30,072] [INFO] [bogon][base.py - line:130] 向下滑动
251 | [2018-12-11 15:26:34,541] [INFO] [bogon][base.py - line:105] 向下滑动
252 | [2018-12-11 15:26:34,544] [INFO] [bogon][base.py - line:130] 向下滑动
253 | [2018-12-11 15:26:39,188] [INFO] [bogon][base.py - line:105] 向下滑动
254 | [2018-12-11 15:26:39,188] [INFO] [bogon][base.py - line:130] 向下滑动
255 | [2018-12-11 15:26:41,652] [INFO] [bogon][base.py - line:173] 断言推荐元素存在,失败!
256 | [2018-12-11 15:26:41,661] [INFO] [bogon][test_home.py - line:26] 结束首页模块
257 | [2018-12-11 15:26:41,661] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
258 | [2018-12-11 15:26:41,856] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
259 | [2018-12-11 15:26:41,856] [INFO] [bogon][driver.py - line:24] a3f8ca3a
260 | [2018-12-11 15:26:41,857] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
261 | [2018-12-11 15:26:41,857] [INFO] [bogon][conftest.py - line:29] driver初始化
262 | [2018-12-11 15:26:46,079] [INFO] [bogon][test_home.py - line:24] 初始化首页模块
263 | [2018-12-11 15:26:49,634] [INFO] [bogon][base.py - line:105] 向下滑动
264 | [2018-12-11 15:26:49,634] [INFO] [bogon][base.py - line:130] 向下滑动
265 | [2018-12-11 15:26:54,444] [INFO] [bogon][base.py - line:105] 向下滑动
266 | [2018-12-11 15:26:54,445] [INFO] [bogon][base.py - line:130] 向下滑动
267 | [2018-12-11 15:26:59,770] [INFO] [bogon][base.py - line:105] 向下滑动
268 | [2018-12-11 15:26:59,771] [INFO] [bogon][base.py - line:130] 向下滑动
269 | [2018-12-11 15:27:04,844] [INFO] [bogon][base.py - line:105] 向下滑动
270 | [2018-12-11 15:27:04,844] [INFO] [bogon][base.py - line:130] 向下滑动
271 | [2018-12-11 15:27:10,003] [INFO] [bogon][base.py - line:105] 向下滑动
272 | [2018-12-11 15:27:10,003] [INFO] [bogon][base.py - line:130] 向下滑动
273 | [2018-12-11 15:27:12,983] [INFO] [bogon][base.py - line:173] 断言推荐元素存在,失败!
274 | [2018-12-11 15:27:12,995] [INFO] [bogon][test_home.py - line:26] 结束首页模块
275 | [2018-12-11 15:27:12,996] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
276 | [2018-12-11 15:27:13,158] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
277 | [2018-12-11 15:27:13,158] [INFO] [bogon][driver.py - line:24] a3f8ca3a
278 | [2018-12-11 15:27:13,159] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
279 | [2018-12-11 15:27:13,159] [INFO] [bogon][conftest.py - line:29] driver初始化
280 | [2018-12-11 15:27:17,411] [INFO] [bogon][test_home.py - line:24] 初始化首页模块
281 | [2018-12-11 15:27:20,966] [INFO] [bogon][base.py - line:105] 向下滑动
282 | [2018-12-11 15:27:20,966] [INFO] [bogon][base.py - line:130] 向下滑动
283 | [2018-12-11 15:27:26,795] [INFO] [bogon][base.py - line:105] 向下滑动
284 | [2018-12-11 15:27:26,796] [INFO] [bogon][base.py - line:130] 向下滑动
285 | [2018-12-11 15:27:30,994] [INFO] [bogon][base.py - line:105] 向下滑动
286 | [2018-12-11 15:27:30,994] [INFO] [bogon][base.py - line:130] 向下滑动
287 | [2018-12-11 15:27:35,397] [INFO] [bogon][base.py - line:105] 向下滑动
288 | [2018-12-11 15:27:35,398] [INFO] [bogon][base.py - line:130] 向下滑动
289 | [2018-12-11 15:27:39,698] [INFO] [bogon][base.py - line:105] 向下滑动
290 | [2018-12-11 15:27:39,698] [INFO] [bogon][base.py - line:130] 向下滑动
291 | [2018-12-11 15:27:41,748] [INFO] [bogon][base.py - line:173] 断言推荐元素存在,失败!
292 | [2018-12-11 15:27:41,757] [INFO] [bogon][test_home.py - line:26] 结束首页模块
293 | [2018-12-11 15:27:41,757] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
294 | [2018-12-11 15:27:41,983] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
295 | [2018-12-11 15:27:41,983] [INFO] [bogon][driver.py - line:24] a3f8ca3a
296 | [2018-12-11 15:27:41,983] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
297 | [2018-12-11 15:27:41,984] [INFO] [bogon][conftest.py - line:29] driver初始化
298 | [2018-12-11 15:27:46,310] [INFO] [bogon][test_home.py - line:24] 初始化首页模块
299 | [2018-12-11 15:27:49,423] [INFO] [bogon][base.py - line:53] 点击元素:搜索
300 | [2018-12-11 15:27:49,844] [INFO] [bogon][base.py - line:67] 文员
301 | [2018-12-11 15:27:49,909] [INFO] [bogon][base.py - line:139] 点击返回
302 | [2018-12-11 15:27:50,151] [INFO] [bogon][base.py - line:139] 点击返回
303 | [2018-12-11 15:27:50,152] [INFO] [bogon][test_home.py - line:26] 结束首页模块
304 | [2018-12-11 15:27:50,152] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
305 | [2018-12-11 15:27:50,355] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
306 | [2018-12-11 15:27:50,355] [INFO] [bogon][driver.py - line:24] a3f8ca3a
307 | [2018-12-11 15:27:50,355] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
308 | [2018-12-11 15:27:50,355] [INFO] [bogon][conftest.py - line:29] driver初始化
309 | [2018-12-11 15:27:54,801] [INFO] [bogon][test_home.py - line:24] 初始化首页模块
310 | [2018-12-11 15:27:58,727] [INFO] [bogon][base.py - line:53] 点击元素:搜索
311 | [2018-12-11 15:27:59,681] [INFO] [bogon][base.py - line:67] 文员
312 | [2018-12-11 15:27:59,683] [INFO] [bogon][test_home.py - line:26] 结束首页模块
313 | [2018-12-11 15:27:59,683] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
314 | [2018-12-11 15:27:59,840] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
315 | [2018-12-11 15:27:59,841] [INFO] [bogon][driver.py - line:24] a3f8ca3a
316 | [2018-12-11 15:27:59,841] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
317 | [2018-12-11 15:27:59,841] [INFO] [bogon][conftest.py - line:29] driver初始化
318 | [2018-12-11 15:28:04,210] [INFO] [bogon][test_home.py - line:24] 初始化首页模块
319 | [2018-12-11 15:28:08,258] [INFO] [bogon][base.py - line:53] 点击元素:搜索
320 | [2018-12-11 15:28:08,890] [INFO] [bogon][base.py - line:67] 文员
321 | [2018-12-11 15:28:08,948] [INFO] [bogon][base.py - line:139] 点击返回
322 | [2018-12-11 15:28:09,179] [INFO] [bogon][base.py - line:139] 点击返回
323 | [2018-12-11 15:28:09,180] [INFO] [bogon][test_home.py - line:26] 结束首页模块
324 | [2018-12-11 15:28:09,181] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
325 | [2018-12-11 15:28:09,319] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
326 | [2018-12-11 15:28:09,320] [INFO] [bogon][driver.py - line:24] a3f8ca3a
327 | [2018-12-11 15:28:09,321] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
328 | [2018-12-11 15:28:09,321] [INFO] [bogon][conftest.py - line:29] driver初始化
329 | [2018-12-11 15:28:13,620] [INFO] [bogon][test_home.py - line:24] 初始化首页模块
330 | [2018-12-11 15:28:17,883] [INFO] [bogon][base.py - line:53] 点击元素:搜索
331 | [2018-12-11 15:28:18,610] [INFO] [bogon][base.py - line:67] 文员
332 | [2018-12-11 15:28:18,732] [INFO] [bogon][base.py - line:139] 点击返回
333 | [2018-12-11 15:28:18,924] [INFO] [bogon][base.py - line:139] 点击返回
334 | [2018-12-11 15:28:18,925] [INFO] [bogon][test_home.py - line:26] 结束首页模块
335 | [2018-12-11 15:28:18,926] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
336 | [2018-12-11 15:28:19,061] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
337 | [2018-12-11 15:28:19,061] [INFO] [bogon][driver.py - line:24] a3f8ca3a
338 | [2018-12-11 15:28:19,062] [INFO] [bogon][driver.py - line:34] 连接设备:a3f8ca3a
339 | [2018-12-11 15:28:19,062] [INFO] [bogon][conftest.py - line:29] driver初始化
340 | [2018-12-11 15:28:23,350] [INFO] [bogon][test_home.py - line:24] 初始化首页模块
341 | [2018-12-11 15:28:27,848] [INFO] [bogon][base.py - line:53] 点击元素:更多
342 | [2018-12-11 15:28:27,851] [INFO] [bogon][test_home.py - line:26] 结束首页模块
343 | [2018-12-11 15:28:27,852] [INFO] [bogon][conftest.py - line:34] 自动化测试结束!
344 | [2018-12-11 15:28:30,741] [INFO] [bogon][run.py - line:27] 报告地址:/Users/xinxi/PycharmProjects/atxdemo/reports/index.html
345 | [2018-12-11 20:44:19,683] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
346 | [2018-12-11 20:44:19,685] [INFO] [bogon][driver.py - line:25] a3f8ca3a
347 | [2018-12-11 20:44:19,687] [INFO] [bogon][driver.py - line:35] 连接设备:a3f8ca3a
348 | [2018-12-11 20:44:19,687] [INFO] [bogon][conftest.py - line:29] driver初始化
349 | [2018-12-11 20:45:02,569] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
350 | [2018-12-11 20:45:02,569] [INFO] [bogon][driver.py - line:25] a3f8ca3a
351 | [2018-12-11 20:45:02,570] [INFO] [bogon][driver.py - line:35] 连接设备:a3f8ca3a
352 | [2018-12-11 20:45:02,570] [INFO] [bogon][conftest.py - line:29] driver初始化
353 | [2018-12-11 20:45:40,006] [INFO] [bogon][conftest.py - line:27] 自动化测试开始!
354 | [2018-12-11 20:45:40,006] [INFO] [bogon][driver.py - line:25] a3f8ca3a
355 | [2018-12-11 20:45:40,007] [INFO] [bogon][driver.py - line:35] 连接设备:a3f8ca3a
356 | [2018-12-11 20:45:40,007] [INFO] [bogon][conftest.py - line:29] driver初始化
357 | [2018-12-11 20:46:02,860] [INFO] [bogon][conftest.py - line:114] ios自动化测试开始!
358 | [2018-12-11 20:46:06,258] [INFO] [bogon][driver.py - line:49] 初始化ios端driver异常!global name 'time' is not defined
359 | [2018-12-11 20:46:06,259] [INFO] [bogon][conftest.py - line:116] driver初始化
360 | [2018-12-11 20:46:26,584] [INFO] [bogon][conftest.py - line:114] ios自动化测试开始!
361 | [2018-12-11 20:46:32,465] [INFO] [bogon][conftest.py - line:116] driver初始化
362 | [2018-12-11 20:47:04,548] [INFO] [bogon][conftest.py - line:114] ios自动化测试开始!
363 | [2018-12-11 20:47:10,674] [INFO] [bogon][conftest.py - line:116] driver初始化
364 | [2018-12-11 20:48:11,829] [INFO] [bogon][conftest.py - line:114] ios自动化测试开始!
365 | [2018-12-11 20:48:17,801] [INFO] [bogon][conftest.py - line:116] driver初始化
366 | [2018-12-11 20:49:27,504] [INFO] [bogon][conftest.py - line:114] ios自动化测试开始!
367 | [2018-12-11 20:49:33,268] [INFO] [bogon][conftest.py - line:116] driver初始化
368 | [2018-12-11 20:49:36,585] [INFO] [bogon][conftest.py - line:119] ios自动化测试结束!
369 | [2018-12-11 20:50:46,330] [INFO] [bogon][conftest.py - line:114] ios自动化测试开始!
370 | [2018-12-11 20:50:54,041] [INFO] [bogon][conftest.py - line:116] driver初始化
371 | [2018-12-11 20:51:49,340] [INFO] [bogon][conftest.py - line:114] ios自动化测试开始!
372 | [2018-12-11 20:52:00,144] [INFO] [bogon][conftest.py - line:116] driver初始化
373 | [2018-12-11 20:52:14,607] [INFO] [bogon][test_home.py - line:22] 初始化首页模块
374 | [2018-12-11 20:52:14,628] [INFO] [bogon][conftest.py - line:119] ios自动化测试结束!
375 | [2018-12-11 21:05:07,872] [INFO] [bogon][conftest.py - line:114] ios自动化测试开始!
376 | [2018-12-11 21:05:11,597] [INFO] [bogon][driver.py - line:49] 初始化ios端driver异常!HTTPConnectionPool(host='localhost', port=8100): Max retries exceeded with url: /session/5BC56C4F-0D82-4136-A468-2D46ACD3BAD8 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 61] Connection refused',))
377 | [2018-12-11 21:05:11,597] [INFO] [bogon][conftest.py - line:116] driver初始化
378 | [2018-12-11 21:05:50,837] [INFO] [bogon][conftest.py - line:114] ios自动化测试开始!
379 | [2018-12-11 21:05:51,864] [INFO] [bogon][driver.py - line:49] 初始化ios端driver异常!HTTPConnectionPool(host='localhost', port=8100): Max retries exceeded with url: /session (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 61] Connection refused',))
380 | [2018-12-11 21:05:51,864] [INFO] [bogon][conftest.py - line:116] driver初始化
381 | [2018-12-11 21:06:01,446] [INFO] [bogon][conftest.py - line:114] ios自动化测试开始!
382 | [2018-12-11 21:06:02,471] [INFO] [bogon][driver.py - line:49] 初始化ios端driver异常!HTTPConnectionPool(host='localhost', port=8100): Max retries exceeded with url: /session (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 61] Connection refused',))
383 | [2018-12-11 21:06:02,472] [INFO] [bogon][conftest.py - line:116] driver初始化
384 | [2018-12-11 21:06:24,721] [INFO] [bogon][conftest.py - line:114] ios自动化测试开始!
385 | [2018-12-11 21:06:25,743] [INFO] [bogon][driver.py - line:49] 初始化ios端driver异常!HTTPConnectionPool(host='localhost', port=8100): Max retries exceeded with url: /session (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 61] Connection refused',))
386 | [2018-12-11 21:06:25,744] [INFO] [bogon][conftest.py - line:116] driver初始化
387 | [2018-12-11 21:06:38,686] [INFO] [bogon][conftest.py - line:114] ios自动化测试开始!
388 | [2018-12-11 21:06:39,709] [INFO] [bogon][driver.py - line:49] 初始化ios端driver异常!HTTPConnectionPool(host='localhost', port=8100): Max retries exceeded with url: /session (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 61] Connection refused',))
389 | [2018-12-11 21:06:39,710] [INFO] [bogon][conftest.py - line:116] driver初始化
390 | [2018-12-11 21:07:21,095] [INFO] [bogon][conftest.py - line:114] ios自动化测试开始!
391 | [2018-12-11 21:08:30,029] [INFO] [bogon][conftest.py - line:114] ios自动化测试开始!
392 | [2018-12-11 21:08:31,058] [INFO] [bogon][driver.py - line:49] 初始化ios端driver异常!HTTPConnectionPool(host='localhost', port=8100): Max retries exceeded with url: /session (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 61] Connection refused',))
393 | [2018-12-11 21:08:31,058] [INFO] [bogon][conftest.py - line:116] driver初始化
394 | [2018-12-11 21:08:57,636] [INFO] [bogon][conftest.py - line:114] ios自动化测试开始!
395 | [2018-12-11 21:08:58,662] [INFO] [bogon][driver.py - line:49] 初始化ios端driver异常!HTTPConnectionPool(host='localhost', port=8100): Max retries exceeded with url: /session (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 61] Connection refused',))
396 | [2018-12-11 21:08:58,662] [INFO] [bogon][conftest.py - line:116] driver初始化
397 | [2018-12-11 21:09:25,076] [INFO] [bogon][conftest.py - line:114] ios自动化测试开始!
398 | [2018-12-11 21:09:26,098] [INFO] [bogon][driver.py - line:49] 初始化ios端driver异常!HTTPConnectionPool(host='localhost', port=8100): Max retries exceeded with url: /session (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 61] Connection refused',))
399 | [2018-12-11 21:09:26,099] [INFO] [bogon][conftest.py - line:116] driver初始化
400 | [2018-12-11 21:11:56,896] [INFO] [bogon][conftest.py - line:114] ios自动化测试开始!
401 | [2018-12-11 21:11:58,129] [INFO] [bogon][driver.py - line:49] 初始化ios端driver异常!('Connection aborted.', error(54, 'Connection reset by peer'))
402 | [2018-12-11 21:11:58,129] [INFO] [bogon][conftest.py - line:116] driver初始化
403 |
--------------------------------------------------------------------------------
/.idea/workspace.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
178 |
179 |
180 |
181 | drg
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 | true
237 | DEFINITION_ORDER
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 | Spelling
254 |
255 |
256 |
257 |
258 | Python
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
348 |
349 |
350 |
351 |
352 |
353 |
354 |
355 |
356 |
357 |
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
372 |
373 |
374 |
375 |
376 |
377 |
378 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
387 |
388 |
389 |
390 |
391 |
392 |
393 |
394 |
395 |
396 |
397 |
398 |
399 |
400 |
401 |
402 |
403 |
404 |
405 |
406 |
407 |
408 |
409 |
410 |
411 |
412 |
413 |
414 |
415 |
416 |
417 |
418 |
419 |
420 |
421 |
422 |
423 |
424 |
425 |
426 |
427 |
428 |
429 |
430 |
431 |
432 |
433 |
434 |
435 |
436 |
437 |
438 |
439 |
440 |
441 |
442 |
443 |
444 |
445 |
446 |
447 |
448 | 1544365908126
449 |
450 |
451 | 1544365908126
452 |
453 |
454 |
455 |
456 |
457 |
458 |
459 |
460 |
461 |
462 |
463 |
464 |
465 |
466 |
467 |
468 |
469 |
470 |
471 |
472 |
473 |
474 |
475 |
476 |
477 |
478 |
479 |
480 |
481 |
482 |
483 |
484 |
485 |
486 |
487 |
488 |
489 |
490 |
491 |
492 |
493 |
494 |
495 |
496 |
497 |
498 |
499 |
500 |
501 |
502 |
503 |
504 |
505 |
506 |
507 |
508 |
509 |
510 |
511 |
512 |
513 |
514 |
515 |
516 |
517 |
518 |
519 |
520 |
521 |
522 |
523 |
524 |
525 |
526 |
527 |
528 |
529 |
530 |
531 |
532 |
533 |
534 |
535 |
536 |
537 |
538 |
539 |
540 |
541 |
542 |
543 |
544 |
545 |
546 |
547 |
548 |
549 |
550 |
551 |
552 |
553 |
554 |
555 |
556 |
557 |
558 |
559 |
560 |
561 |
562 |
563 |
564 |
565 |
566 |
567 |
568 |
569 |
570 |
571 |
572 |
573 |
574 |
575 |
576 |
577 |
578 |
579 |
580 |
581 |
582 |
583 |
584 |
585 |
586 |
587 |
588 |
589 |
590 |
591 |
592 |
593 |
594 |
595 |
596 |
597 |
598 |
599 |
600 |
601 |
602 |
603 |
604 |
605 |
606 |
607 |
608 |
609 |
610 |
611 |
612 |
613 |
614 |
615 |
616 |
617 |
618 |
619 |
620 |
621 |
622 |
623 |
624 |
625 |
626 |
627 |
628 |
629 |
630 |
631 |
632 |
633 |
634 |
635 |
636 |
637 |
638 |
639 |
640 |
641 |
642 |
643 |
644 |
645 |
646 |
647 |
648 |
649 |
650 |
651 |
652 |
653 |
654 |
655 |
656 |
657 |
658 |
659 |
660 |
661 |
662 |
663 |
664 |
665 |
666 |
667 |
668 |
669 |
670 |
671 |
672 |
673 |
674 |
675 |
676 |
677 |
678 |
679 |
680 |
681 |
682 |
683 |
684 |
685 |
686 |
687 |
688 |
689 |
690 |
691 |
692 |
693 |
694 |
695 |
696 |
697 |
698 |
699 |
700 |
701 |
702 |
703 |
704 |
705 |
706 |
707 |
708 |
709 |
710 |
711 |
712 |
713 |
714 |
715 |
716 |
717 |
718 |
719 |
720 |
721 |
722 |
723 |
724 |
725 |
726 |
727 |
728 |
729 |
730 |
731 |
732 |
733 |
734 |
735 |
736 |
737 |
738 |
739 |
740 |
741 |
742 |
743 |
744 |
745 |
746 |
747 |
748 |
749 |
750 |
751 |
752 |
753 |
754 |
755 |
756 |
757 |
758 |
759 |
760 |
761 |
762 |
763 |
764 |
765 |
766 |
767 |
768 |
769 |
770 |
771 |
772 |
773 |
774 |
775 |
776 |
777 |
778 |
779 |
780 |
781 |
782 |
783 |
784 |
785 |
786 |
787 |
788 |
789 |
790 |
791 |
792 |
793 |
794 |
795 |
796 |
797 |
798 |
799 |
800 |
801 |
802 |
803 |
804 |
805 |
806 |
807 |
808 |
809 |
810 |
811 |
812 |
813 |
814 |
815 |
816 |
817 |
818 |
819 |
820 |
821 |
822 |
823 |
824 |
825 |
826 |
827 |
828 |
829 |
830 |
831 |
832 |
833 |
834 |
835 |
836 |
837 |
838 |
839 |
840 |
841 |
842 |
843 |
844 |
845 |
846 |
847 |
848 |
849 |
850 |
851 |
852 |
853 |
854 |
855 |
856 |
--------------------------------------------------------------------------------