AREX: It is a “Differential Testing” and “Record and Replay Testing” Tool.

Overview

AREX: It is a “Differential Testing” and “Record and Replay Testing” Tool.

  • Test restful API by record, replay and stub request/response.
  • Differential testing known as differential fuzzing, is a popular software testing technique that attempts to detect bugs, by providing the same input to a series of similar applications and observing differences in their execution.

Status

AREX is under development now.

Why AREX?

  • AREX finds potential bugs in your service using running instances of your new code and your old code side by side.
    • AREX behaves as a proxy and multicasts whatever requests it receives to each of the running instances.
    • It then compares the responses, and reports any regressions that may surface from those comparisons.
    • The premise for AREX is that if two implementations of the service return “similar” responses for a sufficiently large and diverse set of requests, then the two implementations can be treated as equivalent and the newer implementation is regression-free.
  • Regression testing is an important stage of testing and an important means to ensure quality.
    • Automated regression testing has high use case maintenance costs.
    • The data of automated testing is difficult and the time cost is high.
    • Fully automatic construction of use cases, automatic recording of interface data in production requests and processing, and automatic construction of test requests and stub data.
    • During regression testing, interface requests are automatically played back, and response packets are parsed.
    • Automatically compare the results, analyze the differences intelligently, and display the differences one by one.
    • Continuous accumulation of regression test cases.

Features

  • Fully automatic recording of requests, internal requests and responses without human intervention.
  • Fully automatic difference comparison, automatically generate report.
  • Accumulate test cases to make regression test coverage close to 100%.

Record

  • The minimum range for recording is one RESTFul interface URL.
  • The TraceID is key field of APM-based that recording and playback, data storage in Mongodb.
  • All use cases belonging to this interface include all TraceID requests + responses + Stub data under this interface URL.

Replay

  • The traceid is the smallest unit when Regression Testing execute.
  • In line with the playback target, all matching records can be played back, or some test cases can be filtered out by adding a time range.

Stub

  • stub inner request/response.

Run be tested application

AREX install

git pull [email protected]:arextest/dev-ops.git
cd dev-ops
docker-compose up -d

AREX Agent config

  • Method: Set Env
    • service.name=yourAppName; Config your Application Name
    • storage.service.host=YIP:8093; YIP is IP address of you AREX HOST
    • config.service.host=YIP:8091;
export JAVA_TOOL_OPTIONS="-javaagent:/root/arex/spring-petclinic/arex-java-0.0.1.jar=service.name=myown-spring-petclinc"

If you use to Spring-Petclinic try

export JAVA_TOOL_OPTIONS="-javaagent:./arex-devops/agent/arex-agent-0.0.1.jar=service.name=yourAppName;storage.service.host=YIP:8093;config.service.host=YIP:8091"
  • Run with Docker
    • --name arex-new Config Docker images Name
    • arex.agent.conf Config you server name and port
docker run  -v "$PWD":/usr/src/arex --rm -p 8080:8080 --name arex-new   -w /usr/src/arex openjdk:11  java -javaagent:/usr/src/arex/arex-agent-0.0.1.jar -Darex.config.path=/usr/src/arex/arex.agent.conf -jar /usr/src/arex/spring-petclinic-2.6.0-SNAPSHOT.jar -m org.springframework.samples.petclinic.PetClinicApplication

License

Copyright (C) 2022 ArexTest

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program. If not, see https://www.gnu.org/licenses/.
You might also like...

Employee Management System is a web application developed using Django(Backend) which manages the record of employees, their salary, attendance. publish public notices, assign works to employees, make requests to employees.

Employee Management System is a web application developed using Django(Backend) which manages the record of employees, their salary, attendance. publish public notices, assign works to employees, make requests to employees.

Employee_Management_System Employee Management System is a web application developed using Django(Backend) which manages the record of employees, thei

Dec 16, 2022

The easiest way to record audio on the web :speaker:

BoothJS (or booth.js) is a zero-dependency, extensible wrapper around the Web Audio API that makes recording audio on the web super easy. Booth fully

Dec 15, 2022

Javascript-testing-practical-approach-2021-course-v3 - Javascript Testing, a Practical Approach (v3)

Javascript-testing-practical-approach-2021-course-v3 - Javascript Testing, a Practical Approach (v3)

Javascript Testing, a Practical Approach Description This is the reference repository with all the contents and the examples of the "Javascript Testin

Nov 14, 2022

Mole is a tool to assist with testing and experimentation involving robots and autonomous systems.

Mole Mole is a tool to assist with testing and experimentation involving robots and autonomous systems. It can facilitate the following: test and expe

Jun 28, 2022

To-do list is a tool that helps to organize your day. It simply lists the things that you need to do and allows you to mark them as complete. It is tested by JavaScript Unit testing using Jest framework. It is build by using ES6 and Webpack!

Project Name To Do list: interactive list Description the project. In this project, I added some functionality to my application to make it interactiv

Nov 11, 2022

FIXYL is a tool for testing and verifying software that uses the FIX protocol.

FIXYL is a tool for testing and verifying software that uses the FIX protocol.

FIXYL FIXYL is a tool for testing and verifying software that uses the FIX protocol. It allows establishing FIX sessions and exchanging (and manipulat

Dec 29, 2022

A small and simple stress testing tool for Ethereum-compatible blockchain networks

A small and simple stress testing tool for Ethereum-compatible blockchain networks

Overview pandoras-box is a small transaction stress testing tool, part of any Ethereum client developer's toolkit. It is made for Ethereum-compatible

Aug 30, 2022

Purple hats Desktop is a customisable, automated web accessibility testing tool that allows software development teams to find and fix accessibility problems to improve persons with disabilities (PWDs) access to digital services.

Purple hats Desktop is a customisable, automated web accessibility testing tool that allows software development teams to find and fix accessibility problems to improve persons with disabilities (PWDs) access to digital services.

Purple HATS Desktop Purple hats Desktop is a desktop frontend for Purple HATS accessibility site scanner - a customisable, automated web accessibility

May 11, 2023

A minimal yet powerful HTTP client/API testing tool made for speed.

A minimal yet powerful HTTP client/API testing tool made for speed.

req req is a lightweight, minimal yet powerful HTTP client slash API testing tool designed for speed. Contents Features Installation Documentation Con

Aug 29, 2022
Comments
  • Broken docker compose on MacOS

    Broken docker compose on MacOS

    I am getting the following error with docker compose.

    Error response from daemon: error while creating mount source path '/Users/xxx/src/arex/deployments/arex-data/redis': chown /Users/xxx/src/arex/deployments/arex-data/redis: permission denied

    bug 
    opened by zwobill 4
  • 0.2版本,部署后,发送邮件失败

    0.2版本,部署后,发送邮件失败

    0.2版本,部署后,发送邮件失败,查看report日志: 2022-08-19 07:57:35,991 ERROR c.a.r.c.b.u.MailUtils [http-nio-8080-exec-7] Failed to send email org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.163.com:465 at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1469) ~[commons-email-1.5.jar:1.5] at org.apache.commons.mail.Email.send(Email.java:1496) ~[commons-email-1.5.jar:1.5] at com.arextest.report.core.business.util.MailUtils.sendEmail(MailUtils.java:49) [arex-report-core-0.1.0.jar:?] at com.arextest.report.core.business.LoginService.sendVerifyCodeByEmail(LoginService.java:50) [arex-report-core-0.1.0.jar:?] at com.arextest.report.web.api.service.controller.LoginController.sendVerifyCodeByEmail(LoginController.java:35) [classes/:?] at com.arextest.report.web.api.service.controller.LoginController$$FastClassBySpringCGLIB$$c47cf549.invoke() [classes/:?] at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) [spring-core-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771) [spring-aop-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) [spring-aop-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) [spring-aop-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:47) [spring-aop-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) [spring-aop-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:56) [spring-aop-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) [spring-aop-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88) [spring-aop-5.2.10.RELEASE.jar:5.2.10.RELEASE] at com.arextest.report.web.api.service.aspect.WebLogAspect.doAround(WebLogAspect.java:64) [classes/:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_332] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_332] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_332] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_332] at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644) [spring-aop-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633) [spring-aop-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70) [spring-aop-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) [spring-aop-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95) [spring-aop-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) [spring-aop-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691) [spring-aop-5.2.10.RELEASE.jar:5.2.10.RELEASE] at com.arextest.report.web.api.service.controller.LoginController$$EnhancerBySpringCGLIB$$6b9d8304.sendVerifyCodeByEmail() [classes/:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_332] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_332] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_332] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_332] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) [spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) [spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105) [spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878) [spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792) [spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) [spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) [spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) [spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) [spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) [servlet-api.jar:4.0.FR] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) [servlet-api.jar:4.0.FR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) [catalina.jar:9.0.62] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [catalina.jar:9.0.62] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-websocket.jar:9.0.62] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [catalina.jar:9.0.62] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [catalina.jar:9.0.62] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [catalina.jar:9.0.62] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [catalina.jar:9.0.62] at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [catalina.jar:9.0.62] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [catalina.jar:9.0.62] at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:126) [spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE] at org.springframework.boot.web.servlet.support.ErrorPageFilter.access$000(ErrorPageFilter.java:64) [spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE] at org.springframework.boot.web.servlet.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:101) [spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:119) [spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [catalina.jar:9.0.62] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [catalina.jar:9.0.62] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [catalina.jar:9.0.62] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [catalina.jar:9.0.62] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) [catalina.jar:9.0.62] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [catalina.jar:9.0.62] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) [catalina.jar:9.0.62] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [catalina.jar:9.0.62] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [catalina.jar:9.0.62] at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) [catalina.jar:9.0.62] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [catalina.jar:9.0.62] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) [catalina.jar:9.0.62] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) [tomcat-coyote.jar:9.0.62] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-coyote.jar:9.0.62] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890) [tomcat-coyote.jar:9.0.62] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743) [tomcat-coyote.jar:9.0.62] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-coyote.jar:9.0.62] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-util.jar:9.0.62] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-util.jar:9.0.62] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:9.0.62] at java.lang.Thread.run(Thread.java:750) [?:1.8.0_332] Caused by: java.lang.NoSuchMethodError: com.sun.mail.util.LineOutputStream.(Ljava/io/OutputStream;Z)V at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1655) ~[javax.mail-api-1.6.2.jar:1.6.2] at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1913) ~[javax.mail-api-1.6.2.jar:1.6.2] at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1259) ~[javax.mail-1.5.6.jar:1.5.6] at javax.mail.Transport.send0(Transport.java:255) ~[javax.mail-api-1.6.2.jar:1.6.2] at javax.mail.Transport.send(Transport.java:124) ~[javax.mail-api-1.6.2.jar:1.6.2] at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1459) ~[commons-email-1.5.jar:1.5] ... 89 more

    opened by liaolongfei 0
  • 0caseCount

    0caseCount

    前置条件: 1,docker-compose up -d中的yml文件,把mongo的版本号从5.0改成了4.4.4(5.0报错WARNING: MongoDB 5.0+ requires a CPU with AVX support) 2,agent的jar包与被测服务的jar放在同一个服务器内 3,配置选用设置conf文件方式 4,因为拉取的agent目录同时存在agent与bootstrap两个jar,没有动他们的位置

    步骤: 1,先启动前端,确认成功进入主页面 2,后拉起被测服务 3,调用被测服务中的接口,以达到record目的 4,repaly,输入被测服务的ip与port

    预期结果:调用完以后,页面上的caseCount个数增加,并且能够repaly 实际结果:调用完以后,页面上的caseCount个数仍然为0,并repaly时报错 image

    conf文件配置项: arex.service.name=yourAppName arex.storage.service.host=127.0.0.1:8093 arex.config.service.host=127.0.0.1:8091

    启动命令: nohup java -javaagent:/mnt/AREX/deployments/agent/arex-agent-0.0.1.jar -Darex.enable.debug=true -Darex.config.path=/home/cloud/arex.agent.conf -jar -Xms128m -Xmx128m xxx.jar --qa.host=xxx --spring.profiles.active=dev >/dev/null 2>&1 &

    额外信息: 启动日志: image

    请求日志: image

    bug 
    opened by zaksyjm 2
  • 2022Q3 Plan

    2022Q3 Plan

    AREX

    API Document, API Debug, API Testing, API Auto Testing with Mocker

    Arex = Postman + Document + JMeter + Data Mocker
    • Arex is an API autotesting platform for debug and testing APIs.
    • Simplify and speed up API testing
    • Minimize API testing costs

    Feature

    1. 100% Fully automated regression test
    2. Easy API debugging during development
    3. 100% Production problem debugging
    4. Automatically generate test cases based on real requests
    5. Support for CI
    6. Autogenerate JSON-Schema

    Roadmap

    • Opensource communication
      • [ ] WebSite homepage
      • [ ] Github
      • [ ] Dockerhub
      • [ ] Twitter
      • [ ] Youtube
      • [ ] Mail List
    • Record-Replay Support Language
      • [x] Java (Record and replay with Agent)
      • [ ] Golang
      • [ ] Nodejs
    • General Testing
      • [ ] Chrome plugin
      • [x] Single Request
      • [ ] AUTH
      • [x] Result Assert
      • [ ] Exploratory Testing
      • [x] Multi-Request reslt Compare
      • [ ] Test Static
    • Arex Testing
      • [x] Record-Replay-Analysis
      • [x] Result analysis and Report
      • [x] Template (options of yaml/json format)
      • [ ] Github Action (CI/CD)
      • [x] Arex Dashboard
      • [ ] Mocker Data Edit
      • [ ] Generate Testcases and Assert
      • [ ] AUTH
      • [x] Share and Cooprate
    • API Document
      • [x] Response Json-Schema Generate
      • [ ] Request Json-Schema Generate
      • [ ] Json-Schema Merge
      • [ ] Json-Schema Valid API
    • UI
      • [x] WEB GUI
      • [ ] VSCode plugins
      • [x] Commander
    opened by haibing-wang 0
Owner
ArexTest
An Open Source Testing Framework with Real World Data
ArexTest
A testing focused Remix Stack, that integrates E2E & Unit testing with Playwright, Vitest, MSW and Testing Library. Driven by Prisma ORM. Deploys to Fly.io

Live Demo · Twitter A testing focused Remix Stack, that integrates E2E & Unit testing with Playwright, Vitest, MSW and Testing Library. Driven by Pris

Remix Stacks 18 Oct 31, 2022
A high-resolution local database that uses precise algorithms to easily record data in local files within a project with persistent JSON and YAML support designed to be easy to set up and use

About A high-resolution local database that uses precise algorithms to easily record data in local files within a project with persistent JSON and YML

Shuruhatik 5 Dec 28, 2022
Kyrillos Hany 14 Aug 10, 2022
An implementation of ERC1155D, a record setter for minting and transfer gas efficiency.

ERC1155D An implementation of ERC1155D, a record setter for minting and transfer gas efficiency. This contract is in alpha stage and has not been audi

null 72 Dec 26, 2022
Record games and emulate a League of Legends spectator server

Neeko-Server Neeko-Server is an application that record games emulates a League of Legends spectator server to serve them to the League of Legends cli

Vivi 15 Dec 1, 2022
Leaderboard is a simple app that allow the user to record his name and his score, store to an api

Leaderboard Leader board is a simple app that allows the user to record his name and his score Build With Major languages used : HTML, CSS, JAVASCRIT;

Yannick 3 May 16, 2022
Supercharge Notion with custom commands to record, draw, and more ✍️

Slashy Supercharge Notion with custom commands to record, draw, and more ✨ Slashy is an open source extension that lets you create custom commands for

Alyssa X 425 Dec 28, 2022
Incredible drastically simplifies creation of developer video content. It offers a unified workflow to storyboard, record, collaborate and produce the video.

?? Introduction Incredible drastically simplifies creation of developer video content. It offers a unified workflow to storyboard, record, collaborate

Incredible 113 Dec 6, 2022
A prototype on how web3 technology can enable us to build an open, immutable, reproducible, and permanently accessible scientific record.

Web3 Research A prototype on how web3 technology can enable us to build an open, immutable, reproducible, and permanently accessible scientific record

manveer 0 Nov 27, 2022
Leader board application made with JavaScript that fetches an API to keep a record of users' scores.

Leaderboard This is a leaderboard that allows the user to created boards and input scores to them usin Rest API. Also, it saves new boards into local

Leonardo Albornoz 8 Mar 23, 2022