8-12接口测试进阶-2源码分析

目的:获取接口的地址、请求方法、请求参数
方法:先确定cu树中所需元素的地址和类型

代码

package DateDriver812;

import com.github.javaparser.JavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.body.Parameter;
import com.github.javaparser.ast.expr.AnnotationExpr;
import com.github.javaparser.ast.expr.MemberValuePair;
import com.github.javaparser.ast.expr.NormalAnnotationExpr;
import com.github.javaparser.ast.visitor.VoidVisitorAdapter;
import org.testng.annotations.Test;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class JavaParseDemo2  extends VoidVisitorAdapter {
    private Set<MethodDeclaration> allElement = new HashSet<>();
    private Set<MethodDeclaration> getAllMethod(CompilationUnit cu){
        this.visit(cu,null);
        return allElement;
    }
    @Override
    public void visit(MethodDeclaration n, Object args){
        allElement.add(n);
    }
    @Test
    public void testjavacode() throws IOException{
        FileInputStream in = new FileInputStream("file/BaseController.java");
        CompilationUnit cu = JavaParser.parse(in);
        in.close();
        List<Node> culist = cu.getChildNodes();
        for(Node cuunit:culist){

            if(cuunit instanceof ClassOrInterfaceDeclaration){
                ClassOrInterfaceDeclaration classOrInterfaceDeclaration = (ClassOrInterfaceDeclaration) cuunit;
                List<Node> listNode = classOrInterfaceDeclaration.getChildNodes();
                for(Node n:listNode){
                    if(n instanceof NormalAnnotationExpr){
                        NormalAnnotationExpr normalAnnotationExpr = (NormalAnnotationExpr) n;

                        for(Node tmp:normalAnnotationExpr.getChildNodes()) {
                            if (tmp instanceof MemberValuePair) {
                                MemberValuePair memberValuePair = (MemberValuePair) tmp;

                                if ("value".equalsIgnoreCase(memberValuePair.getName().toString())) {
                                    System.out.println("URL:" + memberValuePair.getValue());
                                }
                            }
                        }
                    }

                }

            }
        }
        for(MethodDeclaration m:this.getAllMethod(cu)){
            System.out.println(m.getName());
            List<AnnotationExpr> listAnnotationExpr = m.getAnnotations();
            for(AnnotationExpr annotationExpr:listAnnotationExpr){
                if("RequestMapping".equalsIgnoreCase(annotationExpr.getName().toString())){
                    List<Node> childNode = annotationExpr.getChildNodes();
                    for(Node n:childNode){
                        if(n instanceof MemberValuePair) {
                            MemberValuePair memberValuePair = (MemberValuePair) n;

                            if ("value".equalsIgnoreCase(memberValuePair.getName().toString())) {
                                System.out.println("接口地址:" + memberValuePair.getValue());
                            }
                            if ("method".equalsIgnoreCase(memberValuePair.getName().toString())) {
                                System.out.println("请求方法:" + memberValuePair.getValue());
                            }
                        }
                    }
                }


            }
            List<Parameter> parameterList = m.getParameters();
            for(Parameter parameter:parameterList){
                List<Node> requestParamList = parameter.getChildNodes();
                for(Node requestParam:requestParamList){
                    if(requestParam instanceof NormalAnnotationExpr){
                        List<Node> valueList = requestParam.getChildNodes();
                        for(Node value:valueList){
                            if(value instanceof  MemberValuePair){
                                MemberValuePair tmp = (MemberValuePair) value;
                                if("value".equalsIgnoreCase(tmp.getName().toString())){
                                    System.out.println("参数名:"+tmp.getValue());
                                }
                                if("required".equalsIgnoreCase(tmp.getName().toString())){
                                    System.out.println("是否必传:"+tmp.getValue());
                                }
                            }
                        }
                    }
                }
                if(!parameter.getType().toString().equalsIgnoreCase("HttpServletRequest")&& !parameter.getType().toString().equalsIgnoreCase("HttpServletResponse")){
                    System.out.println("参数类型:"+parameter.getType());
                }
            }
        }
    }
}

原文地址:https://www.cnblogs.com/csj2018/p/9487253.html