Java编写的接口测试工具

简介: 这几天由于要频繁地使用一些天气数据接口,但是每次都要频繁的打开网页,略显繁琐,故就自己做了两个json数据获取的小工具。第一个先来看看第一个吧,思路是使用一个网络流的处理,将返回的json字符串数据输出到屏幕上,代码如下:package Simple;import java.

这几天由于要频繁地使用一些天气数据接口,但是每次都要频繁的打开网页,略显繁琐,故就自己做了两个json数据获取的小工具。


  • 第一个

先来看看第一个吧,思路是使用一个网络流的处理,将返回的json字符串数据输出到屏幕上,代码如下:

package Simple;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;

public class JsonTools extends JFrame{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    JTextField tf=null;
    JButton button=null,clear=null;
    JTextArea ta=null;

    public JsonTools(){
        tf=new JTextField(28);
        button=new JButton("submit");
        clear=new JButton("Clear");
        ta=new JTextArea();
        init();
        button.addActionListener(new MyActionListener());
        clear.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                tf.setText("");
                ta.setText("\t\t\tThis TextArea has been Cleared! \n\n\t\t\tYou can begin your next test!");
                tf.grabFocus();
            }
        });
    }

    public static void main(String []args){
        new JsonTools();
    }

    @SuppressWarnings("deprecation")
    public void init(){
        this.setTitle("Json 字符串获取工具");
        this.setSize(800,450);
        this.setVisible(true);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);

        JScrollPane js=new JScrollPane(ta);
        js.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);

        JPanel p=new JPanel();
        p.setLayout(new FlowLayout());
        p.add(new JLabel("URL:"));
        p.add(tf);
        p.add(button);
        p.add(clear);
        tf.setFocusable(true);
        button.setNextFocusableComponent(tf);

        this.add(p,BorderLayout.NORTH);
        this.add(js,BorderLayout.CENTER);
    }

    public static String getJsonString(String url){
        String result="";
        URLConnection conn=null;
        BufferedReader reader=null;
        try{
            URL website=new URL(url.trim());
            conn=(URLConnection) website.openConnection();
            reader=new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8"));

            String line="";
            StringBuffer sb=new StringBuffer();
            while((line=reader.readLine())!=null){
                sb.append(line);
            }

            result=sb.toString();
        }catch(MalformedURLException urlException){
            result+=urlException.getMessage();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            result+=e.getMessage();
            e.printStackTrace();
        }catch(Exception total){
            result+=total.getMessage();
            total.printStackTrace();
        }finally{
            if(conn!=null){
                conn=null;
            }
            if(reader!=null){
                try {
                    reader.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    result+=e.getMessage();
                    e.printStackTrace();
                }
                reader=null;
            }
        }
        return result;
    }

    class MyActionListener implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            String jsonString=getJsonString(tf.getText().trim().toString());
            ta.setText(jsonString);
        }

    }
}

下面看一下运行结果吧:
第一种方式的截图


  • 第二种
    第二种主要是调用了java的内核处理机制,这就省去了我们自定义方法处理网络流数据信息了。代码如下:
package WebBase;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class JEditPaneToWebView extends JFrame{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    JTextField tf=null;
    JButton test=null,clear=null;
    JEditorPane editorPane =null;

    public JEditPaneToWebView(){
        tf=new JTextField(28);
        test=new JButton("submit");
        clear=new JButton("Clear");
        init();
        test.addActionListener(new MyActionListener());
        clear.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                tf.setText("");
                editorPane.setText("<body align='center'>\t\t\tThis TextArea has been Cleared! <BT><BR><br>\t\t\tYou can begin your next test!</body>");
                tf.grabFocus();
            }

        });
    }

    public static void main(String []args){
        new JEditPaneToWebView();
    }

    @SuppressWarnings("deprecation")
    public void init(){
        this.setTitle("Json 字符串获取工具 WebView");
        this.setSize(800,450);
        this.setVisible(true);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);

        editorPane=new JEditorPane();
        editorPane.setEditable(false);
        editorPane.setBackground(Color.WHITE);
        JScrollPane scrollPane = new JScrollPane(editorPane,
                                 JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                                 JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

        JPanel p=new JPanel();
        p.setLayout(new FlowLayout());
        p.add(new JLabel("URL:"));
        p.add(tf);
        p.add(test);
        p.add(clear);
        tf.setFocusable(true);
        test.setNextFocusableComponent(tf);

        this.add(p,BorderLayout.NORTH);
        this.add(scrollPane,BorderLayout.CENTER);
    }

    class MyActionListener implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
//          http://www.weather.com.cn/data/cityinfo/101010100.html
            editorPane.setContentType("text/html;charset=utf-8");
            try {
                editorPane.setPage(tf.getText().trim().toString());
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }

    }
}

下面来看一下程序运行的结果吧:
第二种方式截图
其实获取json数据只是其优点的一点点,下面的截图便可以证明JEditPane的强大
第二种方式截图


//你可以在下面的链接中找到这两款工具[下载地址](http://download.csdn.net/detail/marksinoberg/9288665),希望能帮到你。

  • 总结:
    虽然做的这两个软件没什么大的用处,但是确实让我看到了许多组件的强大之处。这其实也是砸告诫我们,要多学习,多看API文档,才能熟能生巧。如果有哪里做得不好的话,还望广大博友不吝赐教,让我们一起进步吧!
目录
相关文章
|
5月前
|
人工智能 缓存 监控
使用LangChain4j构建Java AI智能体:让大模型学会使用工具
AI智能体是大模型技术的重要演进方向,它使模型能够主动使用工具、与环境交互,以完成复杂任务。本文详细介绍如何在Java应用中,借助LangChain4j框架构建一个具备工具使用能力的AI智能体。我们将创建一个能够进行数学计算和实时信息查询的智能体,涵盖工具定义、智能体组装、记忆管理以及Spring Boot集成等关键步骤,并展示如何通过简单的对话界面与智能体交互。
1658 1
|
6月前
|
消息中间件 缓存 前端开发
从资损百万到零事故:Java 接口幂等设计的艺术与实践
在分布式系统中,重复请求常引发严重资损,如支付双扣、库存超卖等问题,其根源在于接口缺乏幂等性设计。本文通过真实案例揭示幂等性的重要性,并详解8种主流解决方案,涵盖唯一请求ID、乐观锁、悲观锁、状态机等,帮助开发者构建稳定系统,保障业务一致性。无论你是架构师还是开发工程师,都能从中获得实战指导,有效规避重复调用带来的风险。
527 2
|
6月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
6月前
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
581 0
|
5月前
|
机器学习/深度学习 人工智能 测试技术
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
EdgeMark是一个面向嵌入式AI的自动化部署与基准测试系统,支持TensorFlow Lite Micro、Edge Impulse等主流工具,通过模块化架构实现模型生成、优化、转换与部署全流程自动化,并提供跨平台性能对比,助力开发者在资源受限设备上高效选择与部署AI模型。
474 9
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
|
5月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
188 11
|
4月前
|
人工智能 监控 Java
Java与AI智能体:构建自主决策与工具调用的智能系统
随着AI智能体技术的快速发展,构建能够自主理解任务、制定计划并执行复杂操作的智能系统已成为新的技术前沿。本文深入探讨如何在Java生态中构建具备工具调用、记忆管理和自主决策能力的AI智能体系统。我们将完整展示从智能体架构设计、工具生态系统、记忆机制到多智能体协作的全流程,为Java开发者提供构建下一代自主智能系统的完整技术方案。
634 4
|
4月前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
252 0
|
5月前
|
人工智能 Java API
Java AI智能体实战:使用LangChain4j构建能使用工具的AI助手
随着AI技术的发展,AI智能体(Agent)能够通过使用工具来执行复杂任务,从而大幅扩展其能力边界。本文介绍如何在Java中使用LangChain4j框架构建一个能够使用外部工具的AI智能体。我们将通过一个具体示例——一个能获取天气信息和执行数学计算的AI助手,详细讲解如何定义工具、创建智能体并处理执行流程。本文包含完整的代码示例和架构说明,帮助Java开发者快速上手AI智能体的开发。
1760 8
|
5月前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
272 6