自动化测试框架 AFramework

码农软件 · 软件分类 · 性能测试和优化 · 2019-11-26 20:43:59

软件介绍

AFramework - An automated testing framework for API test.

About

AFramework是一套通用的功能自动化测试框架,可以很方便的用于验收测试和验收测试驱动开发(ATTD)。

  • AFramework使用易于使用、理解的YAML语法,易于上手。

  • AFramework提供plugin扩展方式,可以快速创建更高级的Action。

  • 编写YAML = 设计代码,很优雅

Requirements

  • Java (本人仅在java 1.7版本下开发完成,发布的release版本也都是在1.7版本下打包完成)

Usage

java -jar AFramework.jar [--testcase-file=testcase.yml]

使用--help查看更多使用帮助。

Testcase

  • 关于YAML语法可参见YAML Syntax),这里有一个示例testcase.yml

  • 每一个YAML文件中包含了一个task列表(任务列表),一个task执行完毕之后,下一个task才会执行,每一个task必须有且仅有一个Action动作,每个task也需要指定一个名称name,这样在运行的过程中,从其输出的任务执行信息中可以很好的辨别出是属于哪一个task的,如果没有定义name,action的值将会用作输出信息标记特定的task。

  • 如果你的task列表很多的时候,在一个YAML文件里面会使得这个文件特别大,可能你会希望这些文件是可以方便去重用的,此时使用include语句引用task文件的方法,可允许你将其分解到更小的文件中。

- name: new task测试用例集
  include:
    name: new_task.yml
  • 定义变量,在task列表运行过程中的任意地方你都可以使用defaults或者vars定义一个新的变量,那么后续的task运行时即可引用。

- vars:
    username: haha
    password: baba
  • 注册变量,变量的另一个用途是在运行命令时,把命令结果存储到一个变量中,此时使用register关键字即可达到注册变量的目的。

- name: 登陆系统获取session
  requests:
    method: POST
    url: http://server/login
    basic_auth:
      - "{{ username }}"
      - "{{ password }}"
  register: session
  • 条件选择when语句,有时候可能需要某一个task只在特定的条件下执行,如上例中想要在登陆成功后再执行某个task

- name: 登陆成功后获取用户信息
  requests:
    method: POST
    url: http://server/info
  when: session.result.Code == "Success"
  • 标准循环,为了保持简洁,重复的任务可以这么写:

- name: 获取多个信息
  requests:
    method: POST
    url: "http://server/info/{{ item }}"
  with_items:
    - Bob
    - Wheel

如果你在前面定义了变量是一个可循环的值,那么你也可以这样做:

with_items: "{{ somelist }}"
  • Do-Util循环,有时你想重试一个任务直到达到某个条件:

- name: 异步请求直至结束
  requests:
    method: POST
    url: "http://server/async_task"
  retries: 20
  delay: 3
  util: result.Code == "Finished"
  • assert断言语句,判断一个task最终执行的结果pass还是fail,在最终的结果统计中也会以此来统计。

- requests:
    method: POST
    url: http://server/info
  assert: result.Code == "Success"
  • Action列表:

    • debug(debug用,用于打印一个变量的值或者一个msg)

    • defaults (定义变量值,若已存在则不改变)

    • requests (HTTP request调用)

    • shell (shell调用)

    • vars (定义变量,若已存在则会覆盖)

Plugins

开发一个插件需要指定包名为com.github.meanstrong.aframework.plugins.action,类必须继承自ActionBase,复写其中的run方法,如下所示:

package com.github.meanstrong.aframework.plugins.action;
public class NewAction extends ActionBase {
    public NewAction(Task task) {
		super(task);
	}

    @Override
	public Map<String, Object> run(Map<String, Object> task_vars) {
        Object args = this.task.args; //args是task中Action对应的参数,可以以map形式取出各值。
        // to do something
    }
}

将写好的插件生成jar后放置于requires目录下,运行AFramework时将自动加载。

Release

Author

AFramework Python版本正在开发中,预计近期也会发布出来。

本文地址:https://codercto.com/soft/d/19863.html

Lua设计与实现

Lua设计与实现

codedump / 人民邮电出版社 / 2017-8 / 49.00元

本书首先介绍了Lua中的数据结构,比如通用数据是如何表示的、Lua的字符串以及表类型的实现原理,接着讨论了Lua虚拟机的实现,并且将其中重点的一些指令进行了分类讲解,最后讨论了垃圾回收、模块实现、热更新、协程等的实现原理。一起来看看 《Lua设计与实现》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换