import java.lang.Thread.State;
import java.util.Iterator;
import java.util.List;

import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;

import tdbservice.ErrorReturn;
import tdbservice.TDB_ReqTLine;
import tdbservice.TDB_TLine;
import tdbservice.TdbService;

public class Client {

private  TTransport transport ;
    private  TdbService.Client client;
    private  String result = new String();
    private String url;
    private int port;

public  Client(String url,int port) throws TTransportException{
        this.url = url;
        this.port = port;
//        transport = new TSocket(url, port);
        transport = new TFramedTransport(new TSocket(this.url, this.port));
        //以上两行为两种不同transport,书写方法主要取决于服务端的书写格式
        if(!transport.isOpen()){
        TProtocol protocol = new TBinaryProtocol(transport);  
        client = new TdbService.Client(protocol);//此处的TdbService的调用由服务端来决定
        transport.open();  
        }
        
        State state = Thread.currentThread().getState();
        String threadName = Thread.currentThread().getName();
        System.out.println(threadName +"--------"+ state.toString());

}
    
    public TTransport getTTransport(){
        return transport;
    }

public String testGetAllStock(){
        
        
            try {  
                result = client.get_allstock();

} catch (TTransportException e) {  
                e.printStackTrace();  
            } catch (TException e) {  
                e.printStackTrace();  
            }  finally{
                transport.close();
            }
            return result;
    }
    
    
    private List<TDB_TLine> TLineResult;
    private StringBuffer sbResult = new StringBuffer();
    
    public String testTLine(TDB_ReqTLine req){//TDB_ReqTLine对象由服务端决定,这里的就是我要测试的接口get_tline的一个参数
        try {
            TLineResult = client.get_tline(req);//此处执行测试接口的调用
            Iterator<TDB_TLine> it = TLineResult.iterator();
            while(it.hasNext()){
                TDB_TLine t =  it.next();
                sbResult.append(t.toString());
            }
        } catch (ErrorReturn e) {
            e.printStackTrace();
        } catch (TException e) {
            e.printStackTrace();
        }        
        return sbResult.toString();
    }
}

接口自动化测试:Thrift框架RPC协议客户端开发的更多相关文章

  1. thrift 是rpc协议

    PC(Remote Procedure Call,远程过程调用)是建立在Socket之上的,出于一种类比的愿望,在一台机器上运行的主程序,可以调用另一台机器上准备好的子程序,就像LPC(本地过程调用) ...

  2. thrift服务端到客户端开发简单示例

    (1)首先我们在服务器端写个helloworld.thrift文件,如下所示: service HelloWorld{ string ping(1: string name), string getp ...

  3. hadoop rpc协议客户端与服务端的交互流程

    尽管这里是hadoop的rpc服务,但是hadoop还是做到了一次连接仅有一次认证.具体的流程待我慢慢道来. 客户端:这里我们假设ConnectionId对应的Connection并不存在.在调用ge ...

  4. python接口自动化测试一:http协议

    1. http简介:http(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议 2. url详解:百度搜索的一个url地址:https://www.baidu.com/s?wd=%E ...

  5. python接口自动化测试 - unittest框架基本使用

    unittest简单介绍 单元测试框架 还可以适用WEB自动化测试用例的开发与执行 提供丰富的断言方法 官方文档:https://docs.python.org/zh-cn/3/library/uni ...

  6. 记录python接口自动化测试--unittest框架基本应用(第二目)

    在第一目里写了几个简单demo,并把调用get和post请求的方法封装到了一个类里,这次结合python自带的unittest框架,用之前封装的方法来写一个接口测试demo 1.unittest简单用 ...

  7. python接口自动化测试 - unittest框架suite、runner详细使用

    test suite 测试套件,理解成测试用例集 一系列的测试用例,或测试套件,理解成测试用例的集合和测试套件的集合 当运行测试套件时,则运行里面添加的所有测试用例 test runner 测试运行器 ...

  8. Jmeter+Ant+Jenkins接口自动化测试(二)_测试方案设计及jmeter脚本开发

    前言 根据之前部署好的测试环境,进行接口自动化测试的方案设计及Jmeter脚本开发.测试方案设计过程中采用了数据分离和对象分离等思路,因此直接通过特定的测试用例文档来驱动整个自动化接口测试的执行,相关 ...

  9. 接口自动化测试框架 (一) :APIAutoTest框架

    前言 随着测试技术的发展,接口自动化测试逐渐成为各大公司投入产出比最高的测试技术.介入时间早,执行效率高,稳定性高的优点,让越来越多的公司引入接口自动化测试. 框架简介 APIAutoTest是处理A ...

随机推荐

  1. js中推断对象详细类型

    大家可能知道js中推断对象类型能够用typeof来推断. 看以下的情况 <script> alert(typeof 1);//number alert(typeof "2&quo ...

  2. 学习vi和vim编辑(3):一个简单的文本编辑器(2)

    然后文章,继续评论vi编辑简单的文本编辑命令. 本文主要是删除的文字.复制,运动命令. 删除文本: 正如上一篇文章中讲过的,对于删除命令("d")也具有"(command ...

  3. IntelliSense 无法仅由函数的返回类型重装分辨

    IntelliSense:无法仅由函数的返回类型重装分辨       d:\programfiles (x86)\microsoft sdks\windows\v7.0a\include\winbas ...

  4. MysqL的root用户不允许远程连接

    原文:MysqL的root用户不允许远程连接 今天程序报了异常:java.sql.SQLException: Access denied for user 'root'@'RJB-Z' (using ...

  5. Calendar计算日期

    一.周六三月进去.星期天 Calendar calendar=Calendar.getInstance();//当前日期 Calendar calendar2=Calendar.getInstance ...

  6. mysql1130远程连接没有权限解决方法

    原因擅自在两个远程连接,一种是由于mysql限制,一个是防火墙限制. 1,解决防火墙限制: 于mysql服务主机将关闭防火墙,或者在防火墙高级设置这增加了入站和出站规则,加号mysql的port.同意 ...

  7. Codeforces Round #256 (Div. 2)——Multiplication Table

    题目链接 题意: n*m的一个乘法表,从小到大排序后,输出第k个数  (1 ≤ n, m ≤ 5·105; 1 ≤ k ≤ n·m) 分析: 对于k之前的数,排名小于k:k之后的数大于,那么就能够採用 ...

  8. Java 多线程编程两个简单的例子

    /** * @author gao */ package gao.org; public class RunnableDemo implements Runnable{ @Override publi ...

  9. Repeater在无数据记录时显示暂无数据

    原文:Repeater在无数据记录时显示暂无数据 方法就是在FooterTemplate加个Label并根据repeater.Items.Count判断是否有记录.关键代码如下: <Footer ...

  10. 【CTO辩论】移动创业大军:谁斗争or变更代理

    众创时代.英雄辈出. 但千军万马过独木桥,竞争厮杀也异常残酷.有人说,这个时代不宜创业,由于技术门槛高了.推广难度高了.盈利模式没了.创业变重了.玩法变了...... 也有人说,时势造英雄.天时地利人 ...