Kea2-python 0.0.1a5__py3-none-any.whl → 0.0.1b0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of Kea2-python might be problematic. Click here for more details.

@@ -14,5 +14,5 @@ def global_block_widgets(d: "Device"):
14
14
  # conditional block list
15
15
  @precondition(lambda d: d(text="In the home page").exists)
16
16
  def block_sth(d: "Device"):
17
- # Important: function shold starts with "block"
17
+ # Important: function shold starts with "block_"
18
18
  return [d(text="widgets to block"), d.xpath(".//node[@text='widget to block']")]
@@ -73,17 +73,7 @@ def check_installation():
73
73
  d.stop_uiautomator()
74
74
 
75
75
 
76
- def _get_agent():
77
- import sys
78
- if len(sys.argv) == 0 or sys.argv[1] == "u2":
79
- sys.argv=sys.argv[:1]
80
- return "u2"
81
- sys.argv=sys.argv[:1]
82
- return "native"
83
-
84
76
  if __name__ == "__main__":
85
-
86
- AGENT=_get_agent()
87
77
  check_installation()
88
78
  KeaTestRunner.setOptions(
89
79
  Options(
@@ -94,7 +84,7 @@ if __name__ == "__main__":
94
84
  maxStep=5000,
95
85
  # running_mins=10, # specify the maximal running time in minutes, default value is 10m
96
86
  # throttle=200, # specify the throttle in milliseconds, default value is 200ms
97
- agent=AGENT # 'native' for running the vanilla Fastbot, 'u2' for running Kea2
87
+ agent="u2" # 'native' for running the vanilla Fastbot, 'u2' for running Kea2
98
88
  )
99
89
  )
100
90
  unittest.main(testRunner=KeaTestRunner)
kea2/cli.py CHANGED
@@ -13,6 +13,12 @@ from pathlib import Path
13
13
 
14
14
  logger = getLogger(__name__)
15
15
 
16
+
17
+ def cmd_version(args):
18
+ from importlib.metadata import version
19
+ print(version("Kea2-python"), flush=True)
20
+
21
+
16
22
  def cmd_init(args):
17
23
  cwd = Path(os.getcwd())
18
24
  configs_dir = cwd / "configs"
@@ -27,8 +33,8 @@ def cmd_init(args):
27
33
  shutil.copytree(src, dst)
28
34
 
29
35
  def copy_samples():
30
- src = Path(__file__).parent / "assets" / "quickstart.py"
31
- dst = cwd / "quickstart.py"
36
+ src = Path(__file__).parent / "assets" / "quicktest.py"
37
+ dst = cwd / "quicktest.py"
32
38
  shutil.copyfile(src, dst)
33
39
 
34
40
  copy_configs()
@@ -39,6 +45,7 @@ def cmd_init(args):
39
45
  def cmd_load_configs(args):
40
46
  pass
41
47
 
48
+
42
49
  def cmd_run(args):
43
50
  base_dir = getProjectRoot()
44
51
  if base_dir is None:
@@ -47,83 +54,13 @@ def cmd_run(args):
47
54
  run(args)
48
55
 
49
56
 
50
- def cmd_install(args):
51
- pass
52
-
53
-
54
- def cmd_uninstall(args):
55
- pass
56
-
57
-
58
- def cmd_start(args):
59
- pass
60
-
61
-
62
- def cmd_stop(args):
63
- pass
64
-
65
-
66
- def cmd_current(args):
67
- pass
68
-
69
-
70
- def cmd_doctor(args):
71
- pass
72
-
73
-
74
- # def cmd_version(args):
75
- # print(__version__)
76
-
77
-
78
57
  _commands = [
79
- # dict(action=cmd_version, command="version", help="show version"),
58
+ dict(action=cmd_version, command="version", help="show version"),
80
59
  dict(
81
60
  action=cmd_init,
82
61
  command="init",
83
62
  help="init the Kea2 project in current directory",
84
- ),
85
- # dict(
86
- # action=cmd_run,
87
- # command="run",
88
- # help="run kea2",
89
- # flags=[
90
- # dict(args=["args"], nargs=argparse.REMAINDER),
91
- # ],
92
- # ),
93
- # dict(
94
- # action=cmd_install,
95
- # command="",
96
- # help="install packages",
97
- # flags=[
98
- # dict(args=["url"], help="package url"),
99
- # ],
100
- # ),
101
- # dict(
102
- # action=cmd_uninstall,
103
- # command="uninstall",
104
- # help="uninstall packages",
105
- # flags=[
106
- # dict(args=["--all"], action="store_true", help="uninstall all packages"),
107
- # dict(args=["package_name"], nargs="*", help="package name"),
108
- # ],
109
- # ),
110
- # dict(
111
- # action=cmd_start,
112
- # command="start",
113
- # help="start application",
114
- # flags=[dict(args=["package_name"], type=str, nargs=None, help="package name")],
115
- # ),
116
- # dict(
117
- # action=cmd_stop,
118
- # command="stop",
119
- # help="stop application",
120
- # flags=[
121
- # dict(args=["--all"], action="store_true", help="stop all"),
122
- # dict(args=["package_name"], nargs="*", help="package name"),
123
- # ],
124
- # ),
125
- # dict(action=cmd_current, command="current", help="show current application"),
126
- # dict(action=cmd_doctor, command="doctor", help="detect connect problem"),
63
+ )
127
64
  ]
128
65
 
129
66
 
@@ -132,9 +69,7 @@ def main():
132
69
  formatter_class=argparse.ArgumentDefaultsHelpFormatter
133
70
  )
134
71
  parser.add_argument("-d", "--debug", action="store_true",
135
- help="show log")
136
- parser.add_argument('-s', '--serial', type=str,
137
- help='device serial number')
72
+ help="show detail log")
138
73
 
139
74
  subparser = parser.add_subparsers(dest='subparser')
140
75
 
kea2/keaUtils.py CHANGED
@@ -4,7 +4,7 @@ from pathlib import Path
4
4
  import subprocess
5
5
  import threading
6
6
  import traceback
7
- from typing import IO, Callable, Any, Dict, List, Literal, NewType, Optional, Union
7
+ from typing import IO, Callable, Any, Dict, List, Literal, NewType, Union
8
8
  from unittest import TextTestRunner, registerResult, TestSuite, TestCase, TextTestResult
9
9
  import random
10
10
  import warnings
@@ -97,6 +97,10 @@ class Options:
97
97
  # the output_dir for saving logs and results
98
98
  output_dir: str = "output"
99
99
 
100
+ def __post_init__(self):
101
+ if self.serial and self.Driver:
102
+ self.Driver.setDeviceSerial(self.serial)
103
+
100
104
 
101
105
  @dataclass
102
106
  class PropStatistic:
@@ -223,6 +227,7 @@ def startFastbotService(options: Options) -> threading.Thread:
223
227
  "reuseq",
224
228
  "--running-minutes", f"{options.running_mins}",
225
229
  "--throttle", f"{options.throttle}",
230
+ "--bugreport", "--output-directory", "/sdcard/fastbot_report"
226
231
  "-v", "-v", "-v"
227
232
  ]
228
233
 
@@ -265,7 +270,7 @@ class KeaTestRunner(TextTestRunner):
265
270
 
266
271
  def _setOuputDir(self):
267
272
  output_dir = Path(self.options.output_dir).absolute()
268
- os.mkdir(output_dir, parents=True, exist_ok=True)
273
+ output_dir.mkdir(parents=True, exist_ok=True)
269
274
  global LOGFILE, RESFILE
270
275
  LOGFILE = output_dir / Path(LOGFILE)
271
276
  RESFILE = output_dir / Path(RESFILE)
kea2/kea_launcher.py CHANGED
@@ -130,7 +130,6 @@ def run(args=None):
130
130
 
131
131
  from kea2 import KeaTestRunner, Options
132
132
  from kea2.u2Driver import U2Driver
133
- U2Driver.setDeviceSerial(args.serial)
134
133
  options = Options(
135
134
  agent=args.agent,
136
135
  driverName=args.driver_name,
kea2/u2Driver.py CHANGED
@@ -88,7 +88,9 @@ class StaticU2UiObject(u2.UiObject):
88
88
  def _transferU2Keys(self, originKey):
89
89
  filterDict = {
90
90
  "resourceId": "resource-id",
91
- "description": "content-desc"
91
+ "description": "content-desc",
92
+ "className": "class",
93
+ "longClickable": "long-clickable",
92
94
  }
93
95
  if filterDict.get(originKey, None):
94
96
  return filterDict[originKey]
@@ -237,6 +239,7 @@ class _XPathEntry(u2.xpath.XPathEntry):
237
239
  super().__init__(d)
238
240
 
239
241
  def __call__(self, xpath, source = None):
242
+ # TODO fully support xpath in widget.block.py
240
243
  self.xpath = xpath
241
244
  return super().__call__(xpath, source)
242
245
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Kea2-python
3
- Version: 0.0.1a5
3
+ Version: 0.0.1b0
4
4
  Summary: A python library for supporting and customizing automated UI testing for mobile apps
5
5
  Author-email: Xixian Liang <xixian@stu.ecnu.edu.cn>
6
6
  Requires-Python: >=3.8
@@ -12,14 +12,18 @@ Dynamic: license-file
12
12
 
13
13
  # Introduction
14
14
 
15
+ [![PyPI](https://img.shields.io/pypi/v/kea2-python.svg)](https://pypi.python.org/pypi/kea2-python)
16
+ [![PyPI Downloads](https://static.pepy.tech/badge/kea2-python)](https://pepy.tech/projects/kea2-python)
17
+ ![Python](https://img.shields.io/badge/python-3.8%2B-blue)
18
+
15
19
  Kea2 is an easy-to-use Python library for supporting, customizing and improving automated UI testing for mobile apps. The library is currently built on top of [Fastbot](https://github.com/bytedance/Fastbot_Android) and [uiautomator2](https://github.com/openatx/uiautomator2), and targeting [Android](https://en.wikipedia.org/wiki/Android_(operating_system)) apps.
16
20
 
17
21
  ### Kea2 has three important features:
18
22
  - **Feature 1**(查找稳定性问题): coming with the full capability of [Fastbot](https://github.com/bytedance/Fastbot_Android) for stress testing and finding *stability problems* (i.e., *crashing bugs*);
19
- - **Feature 2**(自定义测试场景或事件序列[^1]): customizing testing scenarios when running Fastbot (e.g., testing specific app functionalities, executing specific event traces, entering specifc UI pages, reaching specific app states) with the full capability and flexibility powered by *python* language and [uiautomator2](https://github.com/openatx/uiautomator2);
23
+ - **Feature 2**(自定义测试场景或事件序列[^1]): customizing testing scenarios when running Fastbot (e.g., testing specific app functionalities, executing specific event traces, entering specifc UI pages, reaching specific app states, blacklisting specific UI widgets) with the full capability and flexibility powered by *python* language and [uiautomator2](https://github.com/openatx/uiautomator2);
20
24
  - **Feature 3**(支持断言机制[^2]): supporting auto-assertions when running Fastbot, based on the idea of [property-based testing](https://en.wikipedia.org/wiki/Software_testing#Property_testing) inheritted from [Kea](https://github.com/ecnusse/Kea), for finding *logic bugs* (i.e., *non-crashing bugs*)
21
25
 
22
- These three features can be combined to customize and improve automated UI testing.
26
+ These three features can be combined to support, customize and improve automated UI testing.
23
27
 
24
28
  <div align="center">
25
29
  <div style="max-width:80%; max-height:80%">
@@ -46,7 +50,7 @@ In the future, Kea2 will be extended to support
46
50
  - [Appium](https://github.com/appium/appium), [Hypium]() (for HarmonyOS)
47
51
  - other automated UI testing tools (not limited to Fastbot)
48
52
 
49
- > Kea2 is inspired by many valuable insights, advices and lessons shared by experienced industrial practitioners from Bytedance (Zhao Zhang, Yuhui Su from the Fastbot team), OPay (Tiesong Liu), WeChat (Haochuan Lu), Huawei, Xiaomi and etc. Kudos!
53
+ > Kea2 is inspired by many valuable insights, advices and lessons shared by experienced industrial practitioners from Bytedance (Zhao Zhang, Yuhui Su from the Fastbot team), OPay (Tiesong Liu), WeChat (Haochuan Lu, Yuetang Deng), Huawei, Xiaomi and etc. Kudos!
50
54
 
51
55
  ## Installation
52
56
 
@@ -56,24 +60,33 @@ Running requirements/environment:
56
60
  - Android SDK installed
57
61
  - **VPN closed** (Features 2 and 3 required)
58
62
 
63
+
64
+ Install Kea2 by `pip`:
59
65
  ```bash
60
66
  python3 -m pip install Kea2-python
67
+ ```
61
68
 
69
+ Find Kea2's additional options by running
70
+ ```bash
62
71
  kea2 -h
63
72
  ```
64
73
 
65
-
66
74
  ## Quick Test
67
75
 
68
76
  Kea2 connects to and runs on Android devices. We recommend you to do a quick test to ensure that Kea2 is compatible with your devices.
69
77
 
70
78
  1. Connect to an Android device and make sure you can see the connected device by running `adb devices`.
71
79
 
72
- 2. Run `quickstart.py` to test a sample app `omninotes` (released as `omninotes.apk` in Kea2's repository). The script `quickstart.py` will automatically install and test this sample app for a short time.
80
+ 2. Run `quicktest.py` to test a sample app `omninotes` (released as `omninotes.apk` in Kea2's repository). The script `quicktest.py` will automatically install and test this sample app for a short time.
73
81
 
82
+ Initialize Kea2 under your preferred working directory:
74
83
  ```python
75
84
  kea2 init
76
- python3 quickstart.py native
85
+ ```
86
+
87
+ Run the quick test:
88
+ ```python
89
+ python3 quicktest.py
77
90
  ```
78
91
 
79
92
  If you can see the app `omninotes` is successfully running and tested, Kea2 works. Otherwise, please help [file a bug report](https://github.com/ecnusse/Kea2/issues) with the error message to us. Thank you!
@@ -87,20 +100,23 @@ avdmanager create avd --force --name Android12 --package 'system-images;android-
87
100
  emulator -avd Android12 -port 5554 &
88
101
  ```
89
102
 
90
- > [quickstart.py](https://github.com/XixianLiang/KeaPlus/blob/main/quickstart.py) is a dead simple script which is ready-to-go with Fastbot. You can customize this script for testing your apps.
103
+ > [quicktest.py](https://github.com/ecnusse/Kea2/blob/main/kea2/assets/quicktest.py) is a dead simple script which is ready-to-go with Fastbot. You can customize this script for testing your own apps.
91
104
 
92
105
  ## Feature 1(查找稳定性问题): running Fastbot
93
106
 
94
- Test your app with the full capability of [Fastbot](https://github.com/bytedance/Fastbot_Android) for stress testing and finding *stability problems* (i.e., *crashing bugs*);
107
+ Test your app with the full capability of Fastbot for stress testing and finding *stability problems* (i.e., *crashing bugs*);
95
108
 
96
109
 
97
110
  ```bash
98
111
  kea2 run -s "emulator-5554" -p it.feio.android.omninotes.alpha --agent native --running-minutes 10 --throttle 200
99
112
  ```
100
113
 
101
- The usage is similar to the the original [Fastbot](https://github.com/bytedance/Fastbot_Android?tab=readme-ov-file#run-fastbot-with-shell-command)'s shell commands.
102
- See more options by `kea2 run -h`
114
+ The usage is similar to the the original Fastbot's [shell commands](https://github.com/bytedance/Fastbot_Android?tab=readme-ov-file#run-fastbot-with-shell-command).
103
115
 
116
+ See more options by
117
+ ```bash
118
+ kea2 run -h
119
+ ```
104
120
 
105
121
  ## Feature 2(自定义测试场景或事件序列): customizing testing scenarios by scripts
106
122
 
@@ -116,13 +132,13 @@ When running any automated UI testing tools like Fastbot to test your apps, you
116
132
  <img src="docs/stage2.png" style="border-radius: 14px; width: 80%; height: 80%;"/>
117
133
  </div>
118
134
 
119
- Kea2 can support you to test your app by customizing testing scenarios (e.g., testing specific app functionalities, executing specific event traces, entering specifc UI pages, reaching specific app states) with the full capability and flexibility powered by `python` language and [uiautomator2](https://github.com/openatx/uiautomator2);
135
+ Kea2 can support you to test your app by customizing testing scenarios (e.g., testing specific app functionalities, executing specific event traces, entering specifc UI pages, reaching specific app, blacklisting specific UI widgets) with the full capability and flexibility powered by `python` language and [uiautomator2](https://github.com/openatx/uiautomator2);
120
136
 
121
137
  In Kea2, a script is composed of two elements:
122
138
  - **Precondition:** When to execute the script.
123
139
  - **Interaction scenario:** The interaction logic (specified in the script's test method) to reach where we want.
124
140
 
125
- ### Example
141
+ ### Example 1: reaching specific UI pages
126
142
 
127
143
  Assuming `Privacy` is a hard-to-reach UI page during automated UI testing. Kea2 can easily guide Fastbot to reach this page.
128
144
 
@@ -147,17 +163,48 @@ In this case, the `Home` page is the entry page of the `Privacy` page and the `H
147
163
  - In script's test method `test_goToPrivacy`, we specify the interaction logic (i.e., opening `Drawer`, clicking the option `Setting` and clicking `Privacy`) to guide Fastbot to reach the `Privacy` page.
148
164
  - By the decorator `@prob`, we specify the probability (50% in this example) to do the guidance when we are at the `Home` page. As a result, Kea2 still allows Fastbot to explore other pages.
149
165
 
150
- You can find the full example in script `quickstart.py` and run it by executing:
166
+ You can find the full example in script `quicktest.py`, and run this script with Fastbot by the command `kea2 run`:
151
167
 
152
- ```python
153
- python3 quickstart.py u2
168
+ ```bash
169
+ # Launch Kea2 and load one single script quicktest.py.
170
+ kea2 run -s "emulator-5554" -p it.feio.android.omninotes.alpha --agent u2 --running-minutes 10 --throttle 200 --driver-name d unittest discover -p quicktest.py
154
171
  ```
155
172
 
156
- In real use, you can use `kea2 run` to launch the customizing script.
173
+ ### Example 2: blacklisting specific UI widgets
157
174
 
158
- ```bash
159
- # Launch Kea2 and load one single script quickstart.py.
160
- kea2 run -s "emulator-5554" -p it.feio.android.omninotes.alpha --agent u2 --running-minutes 10 --throttle 200 --driver-name d unittest discover -p quickstart.py
175
+ We support blacklisting specific widgets so that Fastbot can avoid interacting with these widgets during fuzzing. We support (1) `Global Block List` (always taking effective), and (2) `Conditional Block List` (only taking effective when some conditions are met).
176
+
177
+ The list of blocked widgets are specified in Kea2's config file `configs/widget.block.py` (generated when running `kea2 init`).
178
+ The widgets needed to be blocked can be flexibly specified by u2 selector (e.g., `text`, `description`) or `xpath`, etc.
179
+
180
+ #### Global Block List
181
+ We can define the function `global_block_widgets` to specify which UI widgets should be blocked globally. The blocking always takes effect.
182
+
183
+ ```python
184
+ # file: configs/widget.block.py
185
+
186
+ def global_block_widgets(d: "Device"):
187
+ """
188
+ global block list.
189
+ return the widgets which should be blocked globally
190
+ """
191
+ return [d(text="widgets to block"),
192
+ d.xpath(".//node[@text='widget to block']"),
193
+ d(description="widgets to block")]
194
+ ```
195
+ #### Conditional Block List
196
+ We can define any reserved function whose name starts with "block_" and decorate such function by `@precondition` to allow conditional block list.
197
+ In this case, the blocking only takes effect when the precondition is satisfied.
198
+ ```python
199
+ # file: configs/widget.block.py
200
+
201
+ # conditional block list
202
+ @precondition(lambda d: d(text="In the home page").exists)
203
+ def block_sth(d: "Device"):
204
+ # Important: the function name should start with "block_"
205
+ return [d(text="widgets to block"),
206
+ d.xpath(".//node[@text='widget to block']"),
207
+ d(description="widgets to block")]
161
208
  ```
162
209
 
163
210
  ## Feature 3(支持断言机制): Supporting auto-assertions by scripts.
@@ -205,9 +252,16 @@ For the preceding always-holding property, we can write the following script to
205
252
  ```
206
253
  > We use [hypothesis](https://github.com/HypothesisWorks/hypothesis), a property-based testing library for Python, to generate random texts according to the given rules.
207
254
 
255
+ You can run this example by using the similar command line in Feature 2.
256
+
208
257
  # Documentation
209
258
 
210
- ## Write scripts
259
+ ## Kea2's tutorials
260
+
261
+ 1. A small tutorial of applying Kea2's Feature 2 and 3 on [WeChat](docs/Scenario_Examples_zh.md).
262
+
263
+
264
+ ## Kea2's scripts
211
265
 
212
266
  Kea2 uses [Unittest](https://docs.python.org/3/library/unittest.html) to manage scripts. All the Kea2's scripts can be found in unittest's rules (i.e., the test methods should start with `test_`, the test classes should extend `unittest.TestCase`).
213
267
 
@@ -246,8 +300,33 @@ class MyFirstTest(unittest.TestCase):
246
300
 
247
301
  You can read [Kea - Write your fisrt property](https://kea-docs.readthedocs.io/en/latest/part-keaUserManuel/first_property.html) for more details.
248
302
 
303
+ ### Notes
304
+ Currently, in `@precondition` decorator and `widgets.block.py`. We only support basic selector (No parent-child relationship) in uiautomator2. The Script body in the function fully support uiautomator2.
305
+
306
+ | | **Support** | **Not support** |
307
+ | -- | -- | -- |
308
+ | **Selctor** | `d(text="1").exist` | `d(text="1").child(text="2").exist` |
309
+
310
+ If you need to specify `parent-child` relation ship in `@precondition`, specify it in xpath.
249
311
 
250
- ## Launch Kea2
312
+ for example:
313
+
314
+ ```python
315
+ # Do not use:
316
+ # @precondition(lambda self:
317
+ # self.d(className="android.widget.ListView").child(text="Bluetooth")
318
+ # ):
319
+ # ...
320
+
321
+ # Use
322
+ @precondition(lambda self:
323
+ self.d.xpath('//android.widget.ListView/*[@text="Bluetooth"]')
324
+ ):
325
+ ...
326
+ ```
327
+
328
+
329
+ ## Launching Kea2
251
330
 
252
331
  We offer two ways to launch Kea2.
253
332
 
@@ -263,8 +342,8 @@ kea2 run <Kea2 cmds> unittest <unittest cmds>
263
342
  Sample shell commands:
264
343
 
265
344
  ```bash
266
- # Launch Kea2 and load one single script quickstart.py.
267
- kea2 run -s "emulator-5554" -p it.feio.android.omninotes.alpha --agent u2 --running-minutes 10 --throttle 200 --driver-name d unittest quickstart.py
345
+ # Launch Kea2 and load one single script quicktest.py.
346
+ kea2 run -s "emulator-5554" -p it.feio.android.omninotes.alpha --agent u2 --running-minutes 10 --throttle 200 --driver-name d unittest discover -p quicktest.py
268
347
 
269
348
  # Launch Kea2 and load multiple scripts from the directory mytests/omni_notes
270
349
  kea2 run -s "emulator-5554" -p it.feio.android.omninotes.alpha --agent u2 --running-minutes 10 --throttle 200 --driver-name d unittest discover -s mytests/omni_notes
@@ -274,6 +353,7 @@ kea2 run -s "emulator-5554" -p it.feio.android.omninotes.alpha --agent u2 --runn
274
353
  | --- | --- |
275
354
  | -s | The serial of your device, which can be found by `adb devices` |
276
355
  | -p | The tested app's package name (e.g., com.example.app) |
356
+ | -o | The ouput directory for logs and results |
277
357
  | --agent | {native, u2}. By default, `u2` is used and supports all the three important features of Kea2. If you hope to run the orignal Fastbot, please use `native`.|
278
358
  | --running-minutes | The time (m) to run Kea2 |
279
359
  | --max-step | The maxium number of monkey events to send (only available in `--agent u2`) |
@@ -339,9 +419,10 @@ maxStep: int # default "inf"
339
419
  running_mins: int = 10
340
420
  # time(ms) to wait when exploring the app
341
421
  throttle: int = 200
422
+ # the output_dir for saving logs and results
423
+ output_dir: str = "output"
342
424
  ```
343
425
 
344
-
345
426
  ## Examining the running statistics of scripts .
346
427
 
347
428
  If you want to examine whether your scripts have been executed or how many times they have been executed during testing. Open the file `result.json` after the testing is finished.
@@ -369,13 +450,10 @@ executed | During UI testing, how many times the test method has been executed?
369
450
  fail | How many times did the test method fail the assertions during UI testing? | When failed, the test method found a likely functional bug.
370
451
  error | How many times does the test method abort during UI tsting due to some unexpected errors (e.g. some UI widgets used in the test method cannot be found) | When some error happens, the script needs to be updated/fixed because the script leads to some unexpected errors.
371
452
 
372
- ### Appendix: Install Kea2 in global environment
453
+ ## Configuration File
373
454
 
374
- ```bash
375
- # In the working directory of Kea2
376
- python3 -m pip install --upgrade pip
377
- python3 -m pip install .
378
- ```
455
+ After executing `Kea2 init`, some configuration files will be generated in the `configs` directory.
456
+ These configuration files belong to `Fastbot`, and their specific introductions are provided in [Introduction to configuration files](https://github.com/bytedance/Fastbot_Android/blob/main/handbook-cn.md#%E4%B8%93%E5%AE%B6%E7%B3%BB%E7%BB%9F).
379
457
 
380
458
  ## Contributors/Maintainers
381
459
 
@@ -1,16 +1,16 @@
1
1
  kea2/__init__.py,sha256=_IFDiyzb6OLyhjldBXrAol6OpOijTnJ2LYWMK4TqSno,121
2
2
  kea2/absDriver.py,sha256=M08ba0kpIer20ApMhX7yCmcLrfPb6a3udZxR_4FhriI,1224
3
3
  kea2/adbUtils.py,sha256=IV-5G_3mc89YP1NJZJIWUrgxb13QECGGXTTANkGH_Rk,8986
4
- kea2/cli.py,sha256=V_TOe-weqc-LvYmf3hGnm5W3_-aa1_swo3rKhOEib4o,4349
5
- kea2/keaUtils.py,sha256=6ZQIrjhH6rBi9mFUO3qJqRJD42i39nkqlq7D-Z4b5vQ,20126
6
- kea2/kea_launcher.py,sha256=m58wi1_L4TrvSjIhkYDNVHljBixXoRe7oUvu59rjBtM,4175
4
+ kea2/cli.py,sha256=eeXWf5aFCEYDKqL1o4qMcxhcCp6yG8twsjaXv0ZaTy0,2756
5
+ kea2/keaUtils.py,sha256=wu_FHlLAO8cj69XpP02sRb0xaJqGuW79uH9onNXD0Ag,20305
6
+ kea2/kea_launcher.py,sha256=RzAoX9T0zoJzYIE-PeIcg7eNWPzwUSsBvA17nObTnpk,4133
7
7
  kea2/logWatcher.py,sha256=hd8banPiCa6aCQ6d_MznWKOdzK_A2X_dPbrx-usjxgE,1927
8
- kea2/u2Driver.py,sha256=NE7Q6OUB9DtoLueZO7ruZoRE3Wp0dp_-R4QHRDLaBvE,10507
8
+ kea2/u2Driver.py,sha256=8j21Rcb9ZuqBIU68Hcx1S_gl6zJ_ZngbIUMxXBBQpEU,10643
9
9
  kea2/utils.py,sha256=zjuoVwts2qVX9GnTaPoiqarfcSvyfW6cAD3ESf_dmrQ,1284
10
10
  kea2/assets/fastbot-thirdpart.jar,sha256=0SZ_OoZFWDGMnazgXKceHgKvXdUDoIa3Gb2bcifaikk,85664
11
11
  kea2/assets/framework.jar,sha256=rTluOJJKj2DFwh7ascXso1udYdWv00BxBwSQ3Vmv-fw,1149240
12
12
  kea2/assets/monkeyq.jar,sha256=TjszvflvE59ev9RhVhkfS_0L46VYZbL2wvpKRyA8ZMk,460366
13
- kea2/assets/quickstart.py,sha256=pHFMEki0XZ05ZI056sXS2LMJ3fuzJHS8UGz1NBQ4AVQ,3068
13
+ kea2/assets/quicktest.py,sha256=QP7P5l3LPmDDSyE2qZ1ZTnH-cFLVP8AYDqDjOBFdRfM,2859
14
14
  kea2/assets/u2.jar,sha256=G9fFf-AZ0CdaZrk27V1-pfJE2Y5eO6PRzPShTnIe-U8,3746525
15
15
  kea2/assets/fastbot_configs/ADBKeyBoard.apk,sha256=L3Kva4gCQALo10EzinCvHrIbffGE3p94qSNbnS8CxP0,163634
16
16
  kea2/assets/fastbot_configs/abl.strings,sha256=Rn8_YEbVGOJqndIY_-kWnR5NaoFI-cuB-ij10Ddhl90,75
@@ -20,14 +20,14 @@ kea2/assets/fastbot_configs/max.fuzzing.strings,sha256=_3bNHwgzlISgxB7RmMury5X3q
20
20
  kea2/assets/fastbot_configs/max.schema.strings,sha256=zYupzvmTtnbPYomI2UCPk0s6PE97t94myZU_j3HutRM,40
21
21
  kea2/assets/fastbot_configs/max.strings,sha256=k82GAAZZG7KbDI7bk7DUklp41WJJO7j-j8Ss1BcybUw,32
22
22
  kea2/assets/fastbot_configs/max.tree.pruning,sha256=dm0oesN75FFbVSkV7STDUmrNMpQUBEuO7Uymt6nEkBc,629
23
- kea2/assets/fastbot_configs/widget.block.py,sha256=xNlC3UwKgff3Cevg6dvzeu8nfEhhVm8CtvwLjsOkuXk,505
23
+ kea2/assets/fastbot_configs/widget.block.py,sha256=DUcN88EPt3vLukvnEWhFdG347uc5L_W-JoSJ3716uBk,506
24
24
  kea2/assets/fastbot_libs/arm64-v8a/libfastbot_native.so,sha256=dA2Tf74-gDrCFdeClsf7qZAy0RqDZQOLlBZ-FViuorw,2005832
25
25
  kea2/assets/fastbot_libs/armeabi-v7a/libfastbot_native.so,sha256=GWcL8M8WfQAd9CfOM6pRYbOnxeycN-LiL7Mf59YIadE,1334420
26
26
  kea2/assets/fastbot_libs/x86/libfastbot_native.so,sha256=k-aw1gEXRWMKZRNHIggKNuZy0wC1y2BnveJGEIO6rbo,2036856
27
27
  kea2/assets/fastbot_libs/x86_64/libfastbot_native.so,sha256=tiofhlf4uMQcU5WAvrdLgTBME0lb83hVUoGtTwxmE8A,2121416
28
- kea2_python-0.0.1a5.dist-info/licenses/LICENSE,sha256=nM9PPjcsXVo5SzNsjRqWgA-gdJlwqZZcRDSC6Qf6bVE,2034
29
- kea2_python-0.0.1a5.dist-info/METADATA,sha256=BFtXGP-TSNBLdQKhHVhAzPDn6gw7SfA_haIMMPR2bTQ,19100
30
- kea2_python-0.0.1a5.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
31
- kea2_python-0.0.1a5.dist-info/entry_points.txt,sha256=mFX06TyxXiUAJQ6JZn8QHzfn8n5R8_KJ5W-pTm_fRCA,39
32
- kea2_python-0.0.1a5.dist-info/top_level.txt,sha256=TsgNH4PQoNOVhegpO7AcjutMVWp6Z4KDL1pBH9FnMmk,5
33
- kea2_python-0.0.1a5.dist-info/RECORD,,
28
+ kea2_python-0.0.1b0.dist-info/licenses/LICENSE,sha256=nM9PPjcsXVo5SzNsjRqWgA-gdJlwqZZcRDSC6Qf6bVE,2034
29
+ kea2_python-0.0.1b0.dist-info/METADATA,sha256=NTKDhgUHAHCtc-jt8YRBpagrG8eZJncQFh9W-GWhV10,22456
30
+ kea2_python-0.0.1b0.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
31
+ kea2_python-0.0.1b0.dist-info/entry_points.txt,sha256=mFX06TyxXiUAJQ6JZn8QHzfn8n5R8_KJ5W-pTm_fRCA,39
32
+ kea2_python-0.0.1b0.dist-info/top_level.txt,sha256=TsgNH4PQoNOVhegpO7AcjutMVWp6Z4KDL1pBH9FnMmk,5
33
+ kea2_python-0.0.1b0.dist-info/RECORD,,