graphWalker使用
官网:http://graphwalker.github.io/yed_model_syntax/
是基于模型测试的工具,以有向图形式表示
节点:代表我们想要执行的期望状态。
顶点表示我们要检查的预期状态。 在任何实现代码/测试中,您都可以在其中找到断言或者oracles。
边:表示从一个顶点到另一个顶点的过渡。无论为了达到下一个状态,都需要采取任何状态。它可以选择一些菜单选项,单击按钮或进行REST API调用。
关键词:
start-这在顶点中用于表示“开始”顶点。 每个模型只有一个Start顶点。
BLOCKED-生成路径时,将排除包含此关键字的顶点或边。 如果它是边缘,它将简单地从图形中删除。 如果它是一个顶点,顶点将会删除其内边和外边。
SHARED-此关键字仅适用于顶点。 这意味着GraphWalker可以跳出当前模型,跳转到具有相同SHARED名称的顶点的任何其他模型。
语法是SHARED:SOME_NAME
INIT-只有一个顶点可以有这个关键字。 在模型中使用数据时,需要初始化数据。 这就是这个关键字的作用。 允许INIT的顶点多于一个顶点。
语法是:INIT:loggedIn=false; rememberMe=true;
REQTAG-只有一个顶点可以有这个关键字。 以逗号分隔的要求列表。 用于创建具有外部需求和模型的可跟踪性。
语法是:REQTAG:String1, String2
weight-只有边可以拥有此关键字。 仅在使用随机生成器时使用。 它保持0到1之间的实数值,并表示应选择边缘的概率。 例如,值0.05表示选择该边缘的概率为5%。 下图中有两个来自顶点v_LoginPrompted的外边缘,它使用关键字权重。
语法是:weight=float value between 0.0 and 1.0
GraphWalker可以在一次会话中运行多个模型
MBT执行:
可以自动化生成测试用例,并且可以产生不同类型的测试用例
-冒烟测试
-功能测试
-非功能测试,exhaustive tests
可以通过从终端运行命令来生成路径。 下面是使用具有边缘覆盖停止条件的随机路径生成器从该图生成的路径的示例。
离线
java -jar graphwalker-cli-3.4.2.jar offline --start-element app_closed --model example_1.graphml "random(edge_coverage(100))"
#只打印当前元素的名字currentElementName
java -jar graphwalker-cli-3.4.2.jar offline --start-element app_closed --model example_1.graphml "random(edge_coverage(100))" | jq -r '.currentElementName
在线
路径生成在测试执行期间完成,即运行时。 这意味着GraphWalker需要嵌入您的测试自动化代码中。 这增加了一些复杂性,但优点是
无需处理文件中的中间路径序列。
java:直接在类前加入注解@GraphWalker
mvn graphwalker:test
您的测试自动化代码可以直接访问图执行上下文。
测试执行选择Selenium
构建方式:
git clone https://github.com/GraphWalker/graphwalker-project.git
cd graphwalker-project
mvn package -pl graphwalker-cli -am
jar包所在位置
graphwalker-cli/target/graphwalker-cli-3.4.2.jar
标准的GraphWalker工作流
Model design
保存成文件 Login.graphml.
Tests selection step
GraphWalker支持特殊规则,可帮助您选择一系列操作和状态,您希望通过模型中的测试覆盖这些操作和状态。
eg.random(edge_coverage(100)):随机浏览模型,直到达到所有(100%)边缘
a_star(reached_vertex(v_Browse)):生成通过模型到顶点“v_Browse”的最短路径
路径产生准则详见http://graphwalker.github.io/generators_and_stop_conditions
Tests execution
创建测试代码
第一种方式使用Maven和模型设计步骤中的完整模型创建所需的所有桩代码。
1.创建文件结构如下
%> mkdir -p login/src/main/java/org/myorg/testautomation
%> mkdir -p login/src/main/resources/org/myorg/testautomation
%> mkdir -p login/src/test/java/org/myorg/testautomation
2.移动保存的模型
%> mv Login.graphml login/src/main/resources/org/myorg/testautomation
3.保存pom.xml到login文件夹下
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.myorg</groupId>
<version>3.2.1</version>
<artifactId>example</artifactId>
<name>GraphWalker Test</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- Set graphwalker.version below to the version you wish to use. We recommend the latest stable version -->
<graphwalker.version>3.4.2</graphwalker.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.graphwalker</groupId>
<artifactId>graphwalker-maven-plugin</artifactId>
<version>${graphwalker.version}</version>
<!-- Bind goals to the default lifecycle -->
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>generate-sources</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.graphwalker</groupId>
<artifactId>graphwalker-core</artifactId>
<version>${graphwalker.version}</version>
</dependency>
<dependency>
<groupId>org.graphwalker</groupId>
<artifactId>graphwalker-java</artifactId>
<version>${graphwalker.version}</version>
</dependency>
<dependency>
<groupId>org.graphwalker</groupId>
<artifactId>graphwalker-maven-plugin</artifactId>
<version>${graphwalker.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
</project>
4.切入登录文件夹,然后运行
%> cd login
%> mvn graphwalker:generate-sources
交互文件可以在文件夹target/generated-sources/graphwalker/.下找到
正在研究用py做。。。。。有这方面研究的欢迎一起交流。
图是用yEd画的