pytest-dsl 0.5.0__py3-none-any.whl → 0.7.0__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.
Files changed (40) hide show
  1. pytest_dsl/cli.py +28 -33
  2. pytest_dsl/core/auto_decorator.py +72 -53
  3. pytest_dsl/core/auto_directory.py +8 -5
  4. pytest_dsl/core/dsl_executor.py +91 -23
  5. pytest_dsl/core/http_request.py +272 -221
  6. pytest_dsl/core/lexer.py +17 -17
  7. pytest_dsl/core/parser.py +52 -4
  8. pytest_dsl/core/parsetab.py +81 -70
  9. pytest_dsl/core/plugin_discovery.py +1 -8
  10. pytest_dsl/core/utils.py +43 -23
  11. pytest_dsl/core/variable_utils.py +215 -70
  12. pytest_dsl/core/yaml_loader.py +96 -19
  13. pytest_dsl/examples/assert/assertion_example.auto +1 -1
  14. pytest_dsl/examples/assert/boolean_test.auto +2 -2
  15. pytest_dsl/examples/assert/expression_test.auto +1 -1
  16. pytest_dsl/examples/custom/test_advanced_keywords.auto +2 -2
  17. pytest_dsl/examples/custom/test_custom_keywords.auto +2 -2
  18. pytest_dsl/examples/custom/test_default_values.auto +2 -2
  19. pytest_dsl/examples/http/file_reference_test.auto +1 -1
  20. pytest_dsl/examples/http/http_advanced.auto +1 -1
  21. pytest_dsl/examples/http/http_example.auto +1 -1
  22. pytest_dsl/examples/http/http_length_test.auto +1 -1
  23. pytest_dsl/examples/http/http_retry_assertions.auto +1 -1
  24. pytest_dsl/examples/http/http_retry_assertions_enhanced.auto +2 -2
  25. pytest_dsl/examples/http/http_with_yaml.auto +1 -1
  26. pytest_dsl/examples/quickstart/api_basics.auto +1 -1
  27. pytest_dsl/examples/quickstart/assertions.auto +1 -1
  28. pytest_dsl/examples/quickstart/loops.auto +2 -2
  29. pytest_dsl/keywords/assertion_keywords.py +76 -62
  30. pytest_dsl/keywords/global_keywords.py +43 -4
  31. pytest_dsl/keywords/http_keywords.py +58 -56
  32. pytest_dsl-0.7.0.dist-info/METADATA +1040 -0
  33. pytest_dsl-0.7.0.dist-info/RECORD +67 -0
  34. {pytest_dsl-0.5.0.dist-info → pytest_dsl-0.7.0.dist-info}/WHEEL +1 -1
  35. pytest_dsl/parsetab.py +0 -69
  36. pytest_dsl-0.5.0.dist-info/METADATA +0 -596
  37. pytest_dsl-0.5.0.dist-info/RECORD +0 -68
  38. {pytest_dsl-0.5.0.dist-info → pytest_dsl-0.7.0.dist-info}/entry_points.txt +0 -0
  39. {pytest_dsl-0.5.0.dist-info → pytest_dsl-0.7.0.dist-info}/licenses/LICENSE +0 -0
  40. {pytest_dsl-0.5.0.dist-info → pytest_dsl-0.7.0.dist-info}/top_level.txt +0 -0
@@ -1,596 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: pytest-dsl
3
- Version: 0.5.0
4
- Summary: A DSL testing framework based on pytest
5
- Author: Chen Shuanglin
6
- License: MIT
7
- Project-URL: Homepage, https://github.com/felix-1991/pytest-dsl
8
- Project-URL: Bug Tracker, https://github.com/felix-1991/pytest-dsl/issues
9
- Classifier: Framework :: Pytest
10
- Classifier: Programming Language :: Python :: 3
11
- Classifier: Programming Language :: Python :: 3.9
12
- Classifier: Programming Language :: Python :: 3.10
13
- Classifier: Programming Language :: Python :: 3.11
14
- Classifier: Programming Language :: Python :: 3.12
15
- Classifier: License :: OSI Approved :: MIT License
16
- Classifier: Operating System :: OS Independent
17
- Requires-Python: >=3.9
18
- Description-Content-Type: text/markdown
19
- License-File: LICENSE
20
- Requires-Dist: pytest>=7.0.0
21
- Requires-Dist: allure-pytest>=2.9.0
22
- Requires-Dist: ply>=3.11
23
- Requires-Dist: filelock>=3.17.0
24
- Requires-Dist: PyYAML==6.0.2
25
- Requires-Dist: jsonpath-ng>=1.5.0
26
- Requires-Dist: requests>=2.28.0
27
- Requires-Dist: lxml>=4.9.0
28
- Requires-Dist: jsonschema>=4.17.0
29
- Requires-Dist: pytz>=2023.3
30
- Dynamic: license-file
31
-
32
- # pytest-dsl: 强大的关键字驱动测试自动化框架
33
-
34
- pytest-dsl是一个基于pytest的关键字驱动测试框架,使用自定义的领域特定语言(DSL)来编写测试用例,使测试更加直观、易读和易维护。它不仅限于API测试,更是一个可以应对各种测试场景的通用自动化框架。
35
-
36
- ## 快速入门
37
-
38
- ### 安装
39
-
40
- ```bash
41
- # 使用 pip 安装
42
- pip install pytest-dsl
43
-
44
- # 或使用 uv 安装(推荐)
45
- uv pip install pytest-dsl
46
- ```
47
-
48
- ### 第一个DSL测试
49
-
50
- 创建第一个DSL文件,命名为`hello.dsl`:
51
-
52
- ```python
53
- message = "Hello, pytest-dsl!"
54
-
55
- # 使用[打印]关键字输出消息
56
- [打印],内容: ${message}
57
-
58
- # 使用简单循环结构
59
- for i in range(1, 3) do
60
- [打印],内容: "循环次数: ${i}"
61
- end
62
-
63
- @teardown do
64
- [打印],内容: "测试完成!"
65
- end
66
- ```
67
-
68
- ### 直接运行DSL文件
69
-
70
- 安装pytest-dsl后,无需其他配置即可通过命令行直接执行DSL文件:
71
-
72
- ```bash
73
- # 运行单个DSL文件
74
- pytest-dsl hello.dsl
75
-
76
- # 也可以执行目录下的所有DSL文件
77
- pytest-dsl tests/
78
- ```
79
-
80
- ### 简单算术示例
81
-
82
- 创建`arithmetic.dsl`文件,测试基本运算:
83
-
84
- ```python
85
- @name: "算术运算示例"
86
-
87
- # 基本运算
88
- a = 10
89
- b = 5
90
- sum = a + b
91
- product = a * b
92
-
93
- # 输出结果
94
- [打印],内容: "a + b = ${sum}"
95
- [打印],内容: "a * b = ${product}"
96
-
97
- # 条件判断
98
- if a > b do
99
- [打印],内容: "a 大于 b"
100
- end
101
- ```
102
-
103
- ## 基础语法
104
-
105
- ### 变量与流程控制
106
-
107
- pytest-dsl支持变量定义、条件判断和循环结构:
108
-
109
- ```python
110
- @name: "测试变量定义、条件判断和循环结构"
111
- # 变量定义
112
- name = "pytest-dsl"
113
- version = "1.0.0"
114
-
115
- # 条件判断
116
- if version == "1.0.0" do
117
- [打印],内容: "当前是正式版"
118
- else
119
- [打印],内容: "当前是开发版"
120
- end
121
-
122
- # 循环结构
123
- count = 3
124
- for i in range(1, ${count}) do
125
- [打印],内容: "循环次数: ${i}"
126
- end
127
- ```
128
-
129
- ### 内置关键字
130
-
131
- DSL提供多种内置关键字满足基本测试需求:
132
-
133
- ```python
134
- @name: 使用内置关键字
135
- # 打印输出
136
- [打印],内容: "测试开始执行"
137
-
138
- # 断言测试
139
- [断言],条件: "1 + 1 == 2",消息: "基本算术断言失败"
140
- ```
141
-
142
- ### 自定义关键字(函数)
143
-
144
- pytest-dsl允许在DSL文件中直接定义自定义关键字,类似于编程语言中的函数:
145
-
146
- ```python
147
- @name: "自定义关键字示例"
148
-
149
- # 定义一个简单的关键字(函数)
150
- @keyword 拼接字符串 (前缀, 后缀="默认后缀") do
151
- # 直接使用关键字参数
152
- [打印],内容: "拼接前缀: ${前缀} 和后缀: ${后缀}"
153
-
154
- # 保存到变量中
155
- 结果变量 = "${前缀}${后缀}"
156
- [打印],内容: "拼接结果: ${结果变量}"
157
-
158
- # 返回结果
159
- return ${结果变量}
160
- end
161
-
162
- # 使用自定义关键字
163
- 问候语 = [拼接字符串],前缀: "你好, ",后缀: "世界"
164
- [打印],内容: ${问候语} # 输出: 你好, 世界
165
-
166
- # 只传递必要参数,使用默认值
167
- 简单问候 = [拼接字符串],前缀: "你好"
168
- [打印],内容: ${简单问候} # 输出: 你好默认后缀
169
- ```
170
-
171
- 自定义关键字可以保存在独立的资源文件中(`.resource`),通过`@import`导入使用:
172
-
173
- ```python
174
- # 导入资源文件
175
- @import: "path/to/common_utils.resource"
176
-
177
- # 使用导入的关键字
178
- 结果 = [拼接字符串],前缀: "开始",后缀: "结束"
179
- ```
180
-
181
- 资源文件的定义示例(`common_utils.resource`):
182
-
183
- ```python
184
- @name: 通用工具关键字
185
- @description: 包含一些常用的工具关键字
186
- @author: Felix
187
- @date: 2024-06-11
188
-
189
- @keyword 拼接字符串 (前缀, 后缀="我是默认值哦") do
190
- # 直接使用关键字参数
191
- [打印],内容:'拼接前缀: ${前缀} 和后缀: ${后缀}'
192
-
193
- # 保存到变量中
194
- 结果变量 = "${前缀}${后缀}"
195
- [打印],内容:'拼接结果: ${结果变量}'
196
-
197
- # 返回结果
198
- return ${结果变量}
199
- end
200
-
201
- @keyword 计算长度 (文本) do
202
- # 在实际场景中,可能会使用更复杂的逻辑
203
- [打印],内容:'计算文本: ${文本} 的长度'
204
- 长度 = 10 # 为简化示例,这里使用固定值
205
- [打印],内容:'计算得到长度: ${长度}'
206
- return ${长度}
207
- end
208
- ```
209
-
210
- ## API测试示例
211
-
212
- 创建`api_test.dsl`文件进行简单的API测试:
213
-
214
- ```python
215
- @name: "API测试示例"
216
- @description: "演示基本的API接口测试"
217
- @tags: ["API", "HTTP"]
218
-
219
- # 执行GET请求
220
- [HTTP请求],客户端: "default",配置: '''
221
- method: GET
222
- url: https://jsonplaceholder.typicode.com/posts/1
223
- asserts:
224
- - ["status", "eq", 200]
225
- - ["jsonpath", "$.id", "eq", 1]
226
- ''',步骤名称: "获取文章详情"
227
-
228
- # 捕获响应数据
229
- [HTTP请求],客户端: "default",配置: '''
230
- method: GET
231
- url: https://jsonplaceholder.typicode.com/posts
232
- request:
233
- params:
234
- userId: 1
235
- captures:
236
- post_count: ["jsonpath", "$", "length"]
237
- asserts:
238
- - ["status", "eq", 200]
239
- ''',步骤名称: "获取用户文章列表"
240
-
241
- # 输出捕获的变量
242
- [打印],内容: "用户文章数量: ${post_count}"
243
- ```
244
-
245
- 在实际测试文件中使用导入的关键字示例(`custom_test.dsl`):
246
-
247
- ```python
248
- @name: 自定义关键字测试
249
- @description: 测试自定义关键字功能
250
- @tags: [测试, 自定义关键字]
251
- @author: Felix
252
- @date: 2024-06-11
253
-
254
- # 导入资源文件
255
- @import: "resources/common_utils.resource"
256
-
257
- # 定义测试输入参数
258
- 前缀值 = "你好, "
259
- 后缀值 = "世界"
260
-
261
- # 测试拼接字符串关键字
262
- [打印],内容:'测试拼接字符串关键字'
263
- 拼接结果 = [拼接字符串],前缀:${前缀值},后缀:${后缀值}
264
- [打印],内容:'获取到拼接结果: ${拼接结果}'
265
-
266
- # 使用默认参数
267
- 拼接结果2 = [拼接字符串],前缀:"hello"
268
- [打印],内容:'获取到拼接结果2: ${拼接结果2}'
269
-
270
- # 测试第二个关键字
271
- [打印],内容:'测试计算长度关键字'
272
- 测试文本 = "这是测试文本"
273
- 文本长度 = [计算长度],文本:${测试文本}
274
- [打印],内容:'获取到文本长度: ${文本长度}'
275
-
276
- # 测试断言
277
- [断言],条件:'${拼接结果} == "你好, 世界"',消息:'字符串拼接不匹配'
278
- [断言],条件:'${文本长度} == 10',消息:'长度不匹配'
279
-
280
- @teardown do
281
- [打印],内容:'自定义关键字测试完成'
282
- end
283
- ```
284
-
285
- ## 使用YAML变量文件
286
-
287
- 创建`variables.yaml`文件管理测试配置:
288
-
289
- ```yaml
290
- # variables.yaml
291
- api:
292
- base_url: "https://jsonplaceholder.typicode.com"
293
- timeout: 30
294
- ```
295
-
296
- 执行测试时加载变量文件:
297
-
298
- ```bash
299
- pytest-dsl api_test.dsl --yaml-vars variables.yaml
300
- ```
301
-
302
- ## 与pytest集成
303
-
304
- 除了直接使用命令行工具外,pytest-dsl还可以与pytest无缝集成,扩展测试能力。
305
-
306
- ### 创建pytest测试类
307
-
308
- ```python
309
- # test_api.py
310
- from pytest_dsl.core.auto_decorator import auto_dsl
311
-
312
- @auto_dsl("./api_tests") # 加载指定目录下所有的.auto或.dsl文件
313
- class TestAPI:
314
- """API测试类
315
-
316
- 该类将自动加载api_tests目录下的所有DSL文件作为测试方法
317
- """
318
- pass
319
- ```
320
-
321
- ### 使用pytest运行测试
322
-
323
- ```bash
324
- # 运行所有测试
325
- pytest
326
-
327
- # 运行特定测试文件
328
- pytest test_api.py
329
-
330
- # 使用pytest参数和插件
331
- pytest -v --alluredir=./reports
332
- ```
333
-
334
- ### 使用Allure生成和查看报告
335
-
336
- pytest-dsl已与Allure报告框架集成,可以生成美观、交互式的测试报告。
337
-
338
- ```bash
339
- # 运行测试并生成Allure报告数据
340
- pytest --alluredir=./allure-results
341
-
342
- # 生成HTML报告并启动本地服务器查看
343
- allure serve ./allure-results
344
-
345
- # 或生成HTML报告到指定目录
346
- allure generate ./allure-results -o ./allure-report
347
- # 然后可以打开 ./allure-report/index.html 查看报告
348
- ```
349
-
350
- Allure报告会自动包含以下信息:
351
- - 测试步骤和执行状态
352
- - HTTP请求和响应详情
353
- - 断言结果和失败原因
354
- - 测试执行时间和性能数据
355
- - 测试标签和分类信息
356
-
357
- 通过Allure报告,您可以更直观地分析测试结果,快速定位问题。
358
-
359
- ## 更多功能
360
-
361
- ### 断言重试功能
362
-
363
- 对于异步API或需要一定处理时间的请求,可以使用断言重试功能:
364
-
365
- ```python
366
- [HTTP请求],客户端: "default",配置: '''
367
- method: GET
368
- url: https://httpbin.org/delay/2
369
- asserts:
370
- - ["status", "eq", 200]
371
- - ["response_time", "lt", 1000] # 这个断言可能失败
372
- ''',断言重试次数: 3,断言重试间隔: 1
373
- ```
374
-
375
- ### 数据驱动测试
376
-
377
- 使用CSV文件测试多组数据:
378
-
379
- ```python
380
- @name: "批量测试"
381
- @data: "test_data.csv" using csv
382
-
383
- # 使用CSV数据中的"username"和"password"列
384
- [HTTP请求],客户端: "default",配置: '''
385
- method: POST
386
- url: https://example.com/api/login
387
- request:
388
- json:
389
- username: "${username}"
390
- password: "${password}"
391
- asserts:
392
- - ["status", "eq", ${expected_status}]
393
- '''
394
- ```
395
-
396
- ## 自定义关键字
397
-
398
- pytest-dsl的真正强大之处在于能够轻松创建自定义关键字,扩展测试能力到任何领域:
399
-
400
- ```python
401
- # keywords/my_keywords.py
402
- from pytest_dsl.core.keyword_manager import keyword_manager
403
-
404
- @keyword_manager.register('调用微服务', [
405
- {'name': '服务名', 'mapping': 'service_name', 'description': '微服务名称'},
406
- {'name': '方法名', 'mapping': 'method_name', 'description': '要调用的方法'},
407
- {'name': '参数', 'mapping': 'params', 'description': '调用参数'}
408
- ])
409
- def call_microservice(**kwargs):
410
- """调用内部微服务接口"""
411
- service = kwargs.get('service_name')
412
- method = kwargs.get('method_name')
413
- params = kwargs.get('params', {})
414
- context = kwargs.get('context')
415
-
416
- # 实现微服务调用逻辑
417
- result = your_microservice_client.call(service, method, params)
418
- return result
419
- ```
420
-
421
- ## 完整项目结构
422
-
423
- ```
424
- 测试项目/
425
- ├── keywords/ # 自定义关键字
426
- │ └── api_keywords.py
427
- ├── tests/ # 测试用例
428
- │ ├── test_api.py # 使用@auto_dsl装饰器的测试类
429
- │ └── api_tests/ # DSL测试文件目录
430
- │ ├── login.dsl
431
- │ └── users.dsl
432
- ├── vars/ # 变量文件
433
- │ ├── dev.yaml # 开发环境配置
434
- │ └── prod.yaml # 生产环境配置
435
- └── pytest.ini # pytest配置
436
- ```
437
-
438
- ## 为什么选择pytest-dsl?
439
-
440
- - **降低自动化门槛**:不需要专业编程技能也能编写自动化测试
441
- - **关注测试逻辑**:不必纠结于编程细节,专注业务测试逻辑
442
- - **统一测试框架**:通过扩展关键字包覆盖多种测试类型
443
- - **无缝集成pytest**:兼容pytest的所有插件和功能
444
- - **可定制性强**:通过自定义关键字实现任何特定领域的测试需求
445
- - **旁路模式扩展**:不干扰现有测试代码,可平滑演进
446
-
447
- ## 核心优势
448
-
449
- - **关键字驱动架构**:使用高级抽象关键字描述测试步骤,无需编写复杂代码
450
- - **易读的DSL语法**:自然语言风格的测试描述,降低学习门槛
451
- - **高度可扩展**:轻松创建自定义关键字满足特定领域需求
452
- - **统一测试框架**:通过扩展关键字包支持多种测试类型
453
- - **完整测试生命周期**:内置teardown、变量管理和断言机制
454
- - **非侵入式设计**:以"旁路模式"扩展现有pytest项目,不影响原有测试代码
455
-
456
- ## 远程关键字功能
457
-
458
- pytest-dsl支持远程关键字调用,允许您在不同的机器或服务上执行关键字,实现分布式测试。
459
-
460
- ### 启动远程关键字服务
461
-
462
- 安装pytest-dsl后,可以使用内置命令启动远程关键字服务:
463
-
464
- ```bash
465
- # 使用默认配置启动(localhost:8270)
466
- pytest-dsl-server
467
-
468
- # 自定义主机和端口
469
- pytest-dsl-server --host 0.0.0.0 --port 8888
470
-
471
- # 使用API密钥保护服务
472
- pytest-dsl-server --api-key your_secret_key
473
- ```
474
-
475
- #### 分布式测试环境配置
476
-
477
- 在分布式测试环境中,您可以在多台机器上启动远程关键字服务:
478
-
479
- 1. **主测试机**:运行测试脚本的机器
480
- 2. **远程执行机**:运行远程关键字服务的机器
481
-
482
- 配置步骤:
483
-
484
- 1. 在每台远程执行机上安装pytest-dsl:
485
- ```bash
486
- pip install pytest-dsl
487
- ```
488
-
489
- 2. 在每台远程执行机上启动远程关键字服务:
490
- ```bash
491
- # 确保监听所有网络接口,以便外部可访问
492
- pytest-dsl-server --host 0.0.0.0 --port 8270
493
- ```
494
-
495
- 3. 在主测试机上编写测试脚本,使用`@remote`指令连接到远程服务:
496
- ```python
497
- # 连接到多台远程执行机
498
- @remote: "http://machine1-ip:8270/" as machine1
499
- @remote: "http://machine2-ip:8270/" as machine2
500
-
501
- # 在不同机器上执行关键字
502
- machine1|[打印],内容: "在机器1上执行"
503
- machine2|[打印],内容: "在机器2上执行"
504
- ```
505
-
506
- ### 远程关键字语法
507
-
508
- ```python
509
- # 导入远程关键字服务器
510
- @remote: "http://keyword-server:8270/" as machineone
511
- @remote: "http://keyword-server2:8270/" as machinetwo
512
-
513
- # 远程关键字调用
514
- machineone|[打印],内容: "这是通过远程服务器执行的关键字"
515
- 结果 = machineone|[拼接字符串],前缀: "Hello, ",后缀: "Remote World!"
516
- ```
517
-
518
- ### 远程关键字测试示例
519
-
520
- ```python
521
- @name: "远程关键字测试"
522
- @description: "测试远程关键字的基本功能"
523
- @tags: ["remote", "keywords"]
524
- @author: "Felix"
525
- @date: 2024-05-21
526
-
527
- # 导入远程关键字服务器
528
- @remote: "http://localhost:8270/" as machineone
529
-
530
- # 基本打印测试
531
- machineone|[打印],内容: "这是通过远程服务器执行的关键字"
532
-
533
- # 随机数生成测试
534
- 随机数 = [生成随机数],最小值: 1,最大值: 100
535
- machineone|[打印],内容: "远程生成的随机数: ${随机数}"
536
- ```
537
-
538
- > **注意**:当前远程关键字模式在HTTP请求关键字上支持的不是太好,后续会优化关键字实现,提升远程关键字的功能和稳定性。
539
-
540
- ### 远程关键字服务安全性
541
-
542
- 在生产环境中使用远程关键字服务时,请注意以下安全建议:
543
-
544
- 1. **使用API密钥认证**:
545
- ```bash
546
- pytest-dsl-server --api-key your_secure_key
547
- ```
548
- 然后在测试脚本中使用API密钥连接:
549
- ```python
550
- @remote: "http://server:8270/?api_key=your_secure_key" as secure_server
551
- ```
552
-
553
- 2. **限制网络访问**:
554
- - 在内部网络或VPN中使用远程关键字服务
555
- - 使用防火墙限制对服务端口的访问
556
- - 考虑使用SSH隧道连接到远程服务
557
-
558
- 3. **监控服务**:
559
- - 定期检查服务日志
560
- - 监控异常访问模式
561
- - 在不需要时关闭服务
562
-
563
- ### 远程关键字最佳实践
564
-
565
- 1. **合理分配关键字**:
566
- - 将计算密集型关键字放在性能更好的机器上
567
- - 将特定环境依赖的关键字放在对应环境的机器上
568
-
569
- 2. **错误处理**:
570
- - 添加适当的错误处理机制,处理远程服务不可用的情况
571
- - 使用超时设置避免长时间等待
572
-
573
- 3. **变量传递**:
574
- - 注意远程关键字执行后,变量会返回到本地上下文
575
- - 大型数据应考虑使用文件或数据库共享,而不是直接通过变量传递
576
-
577
- ## 进阶文档
578
-
579
- - [完整DSL语法指南](./docs/自动化关键字DSL语法设计.md)
580
- - [创建自定义关键字](./pytest_dsl/docs/custom_keywords.md)
581
- - [HTTP测试关键字](./docs/api.md)
582
- - [断言关键字详解](./docs/assertion_keywords.md)
583
- - [HTTP断言重试机制](./docs/http_assertion_retry.md)
584
- - [远程关键字语法示例](./docs/remote_syntax_example.md)
585
-
586
- ## 贡献与支持
587
-
588
- 我们欢迎您的贡献和反馈!如有问题,请提交issue或PR。
589
-
590
- ## 许可证
591
-
592
- MIT License
593
-
594
- ---
595
-
596
- 开始使用pytest-dsl,释放测试自动化的无限可能!
@@ -1,68 +0,0 @@
1
- pytest_dsl/__init__.py,sha256=FzwXGvmuvMhRBKxvCdh1h-yJ2wUOnDxcTbU4Nt5fHn8,301
2
- pytest_dsl/cli.py,sha256=iMGfI2VuBI-ZAZrGfxVcBVtx9P_SMORuwbeMMOnDGXA,4774
3
- pytest_dsl/conftest_adapter.py,sha256=cevEb0oEZKTZfUrGe1-CmkFByxKhUtjuurBJP7kpLc0,149
4
- pytest_dsl/main_adapter.py,sha256=pUIPN_EzY3JCDlYK7yF_OeLDVqni8vtG15G7gVzPJXg,181
5
- pytest_dsl/parsetab.py,sha256=n_-2YnNszS-nq26HI8YbEBhvpNq7n_-092iXlsz34wA,8536
6
- pytest_dsl/plugin.py,sha256=MEQcdK0xdxwxCxPEDLNHX_kGF9Jc7bNxlNi4mx588DU,1190
7
- pytest_dsl/core/__init__.py,sha256=ersUoxIWSrisxs9GX_STlH4XAbjNxAWUQB0NboaC5zI,322
8
- pytest_dsl/core/auth_provider.py,sha256=IZfXXrr4Uuc8QHwRPvhHSzNa2fwrqhjYts1xh78D39Q,14861
9
- pytest_dsl/core/auto_decorator.py,sha256=uEW1t60E_saDLY5MwR2sGTK8IAtCZKruEPq-fRTR5pE,5934
10
- pytest_dsl/core/auto_directory.py,sha256=UF3Xpv4vtwvw0atS1NyChnL2XrnzwLST4H2jwlFip1E,2617
11
- pytest_dsl/core/context.py,sha256=fXpVQon666Lz_PCexjkWMBBr-Xcd1SkDMp2vHar6eIs,664
12
- pytest_dsl/core/custom_keyword_manager.py,sha256=QY-wXvzON2kkFwojBSXqWcQpo_aKixKhG-rsacV8gzE,7955
13
- pytest_dsl/core/dsl_executor.py,sha256=fd-awPL1j1RCZ00fD3AeSwFcHNZzVx_dQe5IIvNe6rE,24127
14
- pytest_dsl/core/dsl_executor_utils.py,sha256=cFoR2p3qQ2pb-UhkoefleK-zbuFqf0aBLh2Rlp8Ebs4,2180
15
- pytest_dsl/core/global_context.py,sha256=NcEcS2V61MT70tgAsGsFWQq0P3mKjtHQr1rgT3yTcyY,3535
16
- pytest_dsl/core/http_client.py,sha256=1AHqtM_fkXf8JrM0ljMsJwUkyt-ysjR16NoyCckHfGc,15810
17
- pytest_dsl/core/http_request.py,sha256=yjcoCN0E49lm44WAO3H73E6Zm-5FuEm1swAIt6E3FFo,55404
18
- pytest_dsl/core/keyword_manager.py,sha256=FtPsXlI7PxvVQMJfDN_nQYvRhkag5twvaHXjELQsCEo,4068
19
- pytest_dsl/core/lexer.py,sha256=nrpprs_a0-x5xQuJ9wo3gz8s03UJzYfri_WXKhTSvmw,3559
20
- pytest_dsl/core/parser.py,sha256=vvdsFc8vi-msa6lM9Rr5eTjJAUJNjQINLnB15AhTJ5E,10039
21
- pytest_dsl/core/parsetab.py,sha256=LSwz0uMGWmmylfrx7daID1TPFog-PhTyWlnSqM1jAXg,24049
22
- pytest_dsl/core/plugin_discovery.py,sha256=jqTX2UzQMCjy6lQV5h2HX63YAdkm25dyfxrLfFp6Wag,6744
23
- pytest_dsl/core/utils.py,sha256=INyuWAX_yhgU9JwSUxVjoB1iI1J6Gy4cVEXZsjJTAOg,4765
24
- pytest_dsl/core/variable_utils.py,sha256=6uY-SWtGMyVvpFb8Sw-5u8oPzNnPQKl0pt9-8mBpwac,9167
25
- pytest_dsl/core/yaml_loader.py,sha256=PFylLutIAutoSod7P_xfA13ZlqVYgTL8-te32Cg-Df4,2065
26
- pytest_dsl/core/yaml_vars.py,sha256=4Z0q9_ergpDjMrNUS0qU5oHrPPLYOL91bWoNxCioSLw,2551
27
- pytest_dsl/docs/custom_keywords.md,sha256=03dA_GeHxoLixA8Sqch14bhTbxXQCSfz9Kvged2fMCo,4381
28
- pytest_dsl/examples/__init__.py,sha256=FKkyLFOjxfC6XnJlW7iK_BUIX9dTIpXgoYN1pfs91ss,84
29
- pytest_dsl/examples/test_assert.py,sha256=zJ9bflsbyyl7v5AKdLHYTVPI4pe8QiQoeym-ULAs0tk,343
30
- pytest_dsl/examples/test_custom_keyword.py,sha256=4R8DPmlzRB9Aw_YPUWezxZSNG5eHb6y81tKPGgFsGNM,221
31
- pytest_dsl/examples/test_http.py,sha256=bjOV5YUsi_2Sb2H8y8e4ClF0kYTuWbRkXY-nYyVX4Tc,666
32
- pytest_dsl/examples/test_quickstart.py,sha256=LfEJ8UM7wDm6X-iZWA5Y70W3KAni-48aDe7aKX_DsyE,322
33
- pytest_dsl/examples/assert/assertion_example.auto,sha256=k30-BnY3PqDkzqE5-m6H-vQmL21ASm98xqi1qfzET8w,1606
34
- pytest_dsl/examples/assert/boolean_test.auto,sha256=FUhCphz68_P-QhJUrKz6w4hBrEyKg4FKwcZ91XMCltE,1366
35
- pytest_dsl/examples/assert/expression_test.auto,sha256=LoiHhjs2vQQqlVp84RLMsyUGpjLXe4M1WxFWc0dLYNs,1947
36
- pytest_dsl/examples/custom/test_advanced_keywords.auto,sha256=nMhPjqv-LISUsBKSt_wTJFAsugheekQpWTjXil1sOD4,1222
37
- pytest_dsl/examples/custom/test_custom_keywords.auto,sha256=8zivEkvLGSd0zROg8PA0Fy7cJFdEEcaHrZbB9ceMSbc,1143
38
- pytest_dsl/examples/custom/test_default_values.auto,sha256=9tWCZhjjrAdPHTLUyG5IoTXtlckRU4IXbXAb-kCsKwU,1365
39
- pytest_dsl/examples/http/__init__.py,sha256=TCV9NzLmBbPDwNpLQs4_s_LlX9T47ApQ5UAr0gHm0bE,40
40
- pytest_dsl/examples/http/builtin_auth_test.auto,sha256=qZYpmxTBW018E5YQ4c8bbnoByEA3Y7BzpPfLJtDwMKQ,2374
41
- pytest_dsl/examples/http/file_reference_test.auto,sha256=AVre1-8rozxiA22FZwVF88jnFPdwqKUSDFynNrU9RX8,3871
42
- pytest_dsl/examples/http/http_advanced.auto,sha256=MwItvtIb81subXLjFsWMQURyohGlyXlFxITpTVLc-PM,2596
43
- pytest_dsl/examples/http/http_example.auto,sha256=YyQUvqyFFUtpBJRIcwv4Ni2Y7akhO7EDD5eLG9jDXkc,4989
44
- pytest_dsl/examples/http/http_length_test.auto,sha256=QXU1I1uTYbo3U52IIdoVkl27zdCN5iu3ig_b0gvXQB0,1973
45
- pytest_dsl/examples/http/http_retry_assertions.auto,sha256=AVqzZ_dzpBquwK6INQuuQopDe_50MyZWghmAKeHkzi0,3333
46
- pytest_dsl/examples/http/http_retry_assertions_enhanced.auto,sha256=QLlGjgY9b3FNYdUUZdyogxbpQQRLmy6IW7QaPK7Pys0,3184
47
- pytest_dsl/examples/http/http_with_yaml.auto,sha256=YEynzdCu8FIQN83qMMoEoph41WEkmomHCzUVCtIhckM,1943
48
- pytest_dsl/examples/http/new_retry_test.auto,sha256=XBTD3NnyVnKr23FVy6xa_5RJq76k8pUR3rFwZe30RRI,664
49
- pytest_dsl/examples/http/retry_assertions_only.auto,sha256=l2MNtJVhJ4vt3jsue1QsoyEAZrNcwyeINmHDfSEOgyk,1867
50
- pytest_dsl/examples/http/retry_config_only.auto,sha256=6zof7HvFdBG6SEZ_ZnHygsuu9hpRpFEj-z1uPwaCSSc,1479
51
- pytest_dsl/examples/http/retry_debug.auto,sha256=wHIGtkCG8p7x4KP1A1nuz6usroU1Pwfep5wkIffgEQo,854
52
- pytest_dsl/examples/http/retry_with_fix.auto,sha256=BU8HeFtY8xor9o9XV_h-yx45_ZP0iAS-Ec12FE_7fNA,649
53
- pytest_dsl/examples/http/simple_retry.auto,sha256=Y7S8sR8VRjdk-iVJxcOD0Fb2tt_RO00BmA9eat3L0ks,569
54
- pytest_dsl/examples/http/vars.yaml,sha256=GO0x6kpaUYk90TSOxtXh_3RYcacw8-ogBv5nG72Lr9Y,1186
55
- pytest_dsl/examples/quickstart/api_basics.auto,sha256=rJP7xsMcV5N5YBAj9KQceJja2BG1mB7JSXqTv5m9OzY,1545
56
- pytest_dsl/examples/quickstart/assertions.auto,sha256=saDuaxoV-UBmQqXPNdRfmWKS2ALUaKrntabJUV2yLAo,860
57
- pytest_dsl/examples/quickstart/loops.auto,sha256=2UPuNhvErCoPis-nDStSLj5EY-lo1FKW_5YhqyYux_Q,518
58
- pytest_dsl/keywords/__init__.py,sha256=5aiyPU_t1UiB2MEZ6M9ffOKnV1mFT_2YHxnZvyWaBNI,372
59
- pytest_dsl/keywords/assertion_keywords.py,sha256=H0vNCvfG3h8R3ST6C5sVTEH8OTWj3x94cAzqSNBBRLI,22827
60
- pytest_dsl/keywords/global_keywords.py,sha256=RZcJ9ksfXZaRvds4247LFXu-8a0LFqTvVaD4n98GUrk,1410
61
- pytest_dsl/keywords/http_keywords.py,sha256=Dxz_ebtGoy0D4Almn5LtBD9RSZnkeoHhygoGNcBSkOw,24810
62
- pytest_dsl/keywords/system_keywords.py,sha256=n_jRrMvSv2v6Pm_amokfyLNVOLYP7CFWbBE3_dlO7h4,11299
63
- pytest_dsl-0.5.0.dist-info/licenses/LICENSE,sha256=Rguy8cb9sYhK6cmrBdXvwh94rKVDh2tVZEWptsHIsVM,1071
64
- pytest_dsl-0.5.0.dist-info/METADATA,sha256=jhvveN2EgoKR5TvJmmR7ONGQXyFceopAea13ZPhO8xQ,16405
65
- pytest_dsl-0.5.0.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
66
- pytest_dsl-0.5.0.dist-info/entry_points.txt,sha256=qqxFwSHQtjoae8_WWiO6w8y0N9nC4H8eFRvOnr_OipE,152
67
- pytest_dsl-0.5.0.dist-info/top_level.txt,sha256=4CrSx4uNqxj7NvK6k1y2JZrSrJSzi-UvPZdqpUhumWM,11
68
- pytest_dsl-0.5.0.dist-info/RECORD,,