精华内容
下载资源
问答
  • 主要介绍了Python接口测试文件上传实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • python接口自动化测试是PDF文档形式,文档中的实现以Python语言为基础,进行HTTP接口自动化框架,模块包括Excel进行参数化,读取配置文件,读取测试用例,执行测试用例,记录...是学习python接口自动化测试的绝佳文档。
  • python接口自动化测试框架---包括请求的封装、数据库操作、多断言、ddt数据驱动、多种请求方式等
  • python接口自动化_YY.pdf

    2019-08-07 09:36:30
    python接口自动化测试教程,适合有Python基础的同学进行接口自动化测试
  • 本篇文章主要介绍了python 接口测试response返回数据对比的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • python 接口自动化测试python 接口自动化测试python 接口自动化测试python 接口自动化测试python 接口自动化测试python 接口自动化测试python 接口自动化测试python 接口自动化测试python 接口自动化测试python 接口...
  • python接口自动化测试

    2018-09-21 11:07:01
    python接口自动化测试教程,主要内容如下:基本原理,网络接口,json处理,网络请求,自动化
  • python接口测试视频

    2018-10-11 16:45:29
    python接口测试视频,自学python接口测试的同学,可以下载观看!很不错的资源我自己也在学习!跟着一步一步学习,不用去花钱培训
  • 使用python+unittest+request数据驱动 一个轻量级api自动化测试框架
  • 第一步:用 discover 方法加载所有的测试用例 1.cur_path 这个参数是读取当前这个脚本的真实路径,也就是 run_main.py 的真实路径 2.caseName="case"这个 case 是存放测试用例的文件夹,如果没有的话,自动创建。...
  • 将通过python+request+unittest+HTMLTestRunner框架进行接口的自动化测试,包含有具体的案例,代码。
  • caffe框架中python接口的使用,包括如何利用训练好的模型验证一个jpg图片属于哪一类的方法。
  • yolov3python接口.py

    2019-11-15 15:05:06
    python接口调用yolov3训练模型检测网页端的图片,只有一个python文件就可实现,只需要训练好的权重和names文件即可实现python接口调用。
  • python接口测试

    2018-07-02 17:16:29
    python接口测试框架源码python接口测试框架源码python接口测试框架源码
  • MATLAB与Python接口

    千次阅读 2019-11-22 12:01:25
    介绍MATLAB与Python接口的多种方法,包括MATLAB与Python的相互调用以及将MATLAB代码打包成组件然后在Python中集成。 【课程收益】 MATLAB调用Python Python调用MATLAB 将MATLAB代码打包成组件然后在Python中集成...

    【课程介绍】
    介绍MATLAB与Python接口的多种方法,包括MATLAB与Python的相互调用以及将MATLAB代码打包成组件然后在Python中集成。
    【课程收益】
    MATLAB调用Python
    Python调用MATLAB
    将MATLAB代码打包成组件然后在Python中集成

    视频教程入口

    第一章:使用Python调用MATLAB

        01. MATLAB包简介 4:59
        02. 安装、启动和停止 9:40
        03. 从Python调用MATLAB函数 11:23
        04. 从Python调用用户脚本和函数 8:10
        05. 在Python中使用MATLAB句柄对象 13:43
        06. 在Python中使用MATLAB引擎工作区 8:07
        07. 数据传递 5:52
        08. MATLAB数组作为Python变量 16:16
        09. MATLAB和Python中默认的数值类型 6:22
        10. Python调用MATLAB绘图 12:05
    

    第二章:从MATLAB调用Python

        1. 安装Python 6:55
        2. MATLAB调用Python函数 6:11
        3. MATLAB调用自定义Python模块 5:59
        4. MATLAB调用Python对象 6:06
        5. 数据类型相关-数值类型 7:25
        6. 数据类型相关-字符串 8:57
        7. 数据类型相关-列表 6:20
        8. 数据类型相关-字典 2:44
        9. 数据类型相关-元组 4:03
    

    第三章:基于组件(Python包)的混合编程

        1. MATLAB的库编译器 11:40
        2. 将M文件编译为Python包 11:36
        3. 在Python中使用Python包 6:09
    

    视频教程入口

    展开全文
  • C/C++调用python接口入门(1-全是坑)

    千次阅读 2020-04-17 09:10:17
    文章目录从一个简单的python爬虫开始~~正头戏C++调用python接口~~(误)但被开篇劝退那些劝退的开头几坑总结python37_d.lib链接错误error LNK2001: 无法解析的外部符号 __imp_PyObject_GetAttrString 等一大串报错真_...

    @Coding Environment VS2019 Python3.7 Qt5.1
    这是我第一次python c/c++接口尝试,面对网上资源不全,版本不一,官网API文档阅读困难,特写此篇,希望能给一些人避开那些恶心的坑.

    从一个简单的python爬虫开始

    爬取有道词典的包,来翻译文件,代码如下:

    // Python3.7 at Pycharm
    #coding=utf-8
    
    from urllib import request
    from urllib import parse
    import json
    #这是一个接口函数,输入data来进行翻译,在此不再过多解释,返回值为有道的翻译内容
    def fanyi_youdao_API_21(data,from_d = 'AUTO',to_d = 'auto'):
        Request_URL="http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
        form_data={}
        form_data['i']=data
        form_data['from'] = from_d
        form_data['to'] = to_d
        form_data['smartresult'] = 'dict'
        form_data['doctype']='json'
        form_data['version']='2.1'
        form_data['keyfrom']='fanyi.web'
        form_data['action']='FY_BY_CLICKBUTTION'
        form_data['typoResult']='false'
        data=parse.urlencode(form_data).encode('utf-8')
        response=request.urlopen(Request_URL,data)
        html=response.read().decode('utf-8')
        translate_results = json.loads(html)
        translate_result = translate_results["translateResult"][0][0]['tgt']
        return translate_result
    # c = fanyi_youdao_API_21('hello')
    # print("翻译结果:%s" % c)
    

    在这里插入图片描述

    正头戏C++调用python接口(误)但被开篇劝退

    好了正片来了,我们希望能用c/c++调用这个接口函数,来实现翻译的目的
    于是乎我去翻了官网的API文档API
    原来是这样
    #define PY_SSIZE_T_CLEAN
    #include <Python.h>
    就可以了,但是vs里显然没有这样的库.翻了翻文件,在python的文件目录里找到了Python.h
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    简单包含目录嘛试着跑一下:不行python37_d.lib链接错误
    找啊找啊找资料,终于找到一个靠谱的
    修改完毕,什么还是没有lib?
    这时要在配置里附加lib的位置
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    好的添加完成,终于可以了吧???
    在这里插入图片描述
    好的,报错了,再见
    怎么可能这么放弃了呢?
    在笔者找了好久后终于找到问题:64位系统安装64位python,必须在x64环境下编译
    所以只要改成在这里插入图片描述就可以了
    在这里值得一说的是,改完环境前面的几步全!部!要!再!弄!一!次!

    那些劝退的开头几坑总结

    python37_d.lib链接错误

    参考1
    https://blog.csdn.net/weixin_40127330/article/details/99731879?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2

    error LNK2001: 无法解析的外部符号 __imp_PyObject_GetAttrString 等一大串报错

    把编程环境切换为64位的
    在这里插入图片描述

    真_正头戏C++调用python接口

    先看一篇简单的代码

    #include <stdio.h>
    #include <Python.h>
    #include <iostream>
    using namespace std;
    int main() {
    
        // 初始化Python虚拟机
        Py_Initialize();
        // 判断Python虚拟机是否成功
        if (Py_IsInitialized() == 0) {
            cout<<"fal to initialize Python"<<endl;
            return -1;
        }
        cout << "server start" << endl;
    
        // 退出Python虚拟机
        Py_Finalize();
        cout << "server end" << endl;
        return 0;
    }
    

    在这里插入图片描述
    一切正常,我们在c\c++中已经可以调用python虚拟机了,也说明前面的坑顺利跨过.

    python的数据:PyObject

    PyObject是什么?就是存放python数据的类,每个指向Python对象的指针都可以转换为PyObject *.知道这些就可以了,我们是要看怎么用,而不是怎么实现,怎么实现和详细功能可以等基础了解清楚后再了解.
    创建的方式很简单:

    PyObject* a;
    

    至于PyObject对象怎么创建python.h为我们提供了一种函数:
    Py_BuildValue
    他可以使用其将C的所有基本数据类型转换成Python可访问的数据类型。

    类型互相转化:

    (依旧用上一段代码,加了几行)

    #include <stdio.h>
    #include <Python.h>
    #include <iostream>
    using namespace std;
    int main() {
    
        // 初始化Python虚拟机
        Py_Initialize();
        // 判断Python虚拟机是否成功
        if (Py_IsInitialized() == 0) {
            cout<<"fal to initialize Python"<<endl;
            return -1;
        }
        cout << "server start" << endl;
        PyObject* p_val1 = Py_BuildValue("i", 233);
        int c_val = PyLong_AsLong(p_val1);
        // 退出Python虚拟机
        cout << c_val << endl;
        Py_Finalize();
        cout << "server end" << endl;
        return 0;
    }
    
    PyObject* p_val1 = Py_BuildValue("i", 233);//i表示int,233是(int)233,转化为PyObject
    int c_val = PyLong_AsLong(p_val1);//将PyObject转化为int
    

    这两行是两种类型的互相转化
    同理long int 只要将i改为l,PyLong_AsLong改为PyLong_AsLongLong即可.如下表

    类型第一个参数对应的转化
    intPy_BuildValue(“i”, 233)PyLong_AsLong(p_val1)
    unsign intPy_BuildValue(“I”, 233)大写iPyLong_AsUnsignedLong(p_val1)
    long longPy_BuildValue(“l”, 233333333333)小写LPyLong_AsLongLong(p_val1)
    float/doublePy_BuildValue(“d”, 233.3)PyFloat_AsDouble(p_val1)
    boolPy_BuildValue(“b”, true)PyInt_AsLong(p_val1)

    对于的转化方式除了这种以外还可以用PyArg_Parse()来实现,但是要在堆空间里事先声明指针结构
    不过string有些不同(尤其是python3):
    网上资料十分散乱而且还都是python2的.我足足找了2小时资料,终于有了办法
    虽然不是最好的,但是是可行的

        const char* pstr = "this is a test";
        PyObject* py_str = Py_BuildValue("s", pstr);   // Python 字符串对象
        PyObject* u_str = PyCodec_Encode(py_str, "utf-8",NULL);//Python unicode 对象
        char* c_pstr = PyBytes_AsString(u_str);   // 转成C的字符指针
        printf("c_pstr = %s\n", c_pstr);
    

    不过要说一点就是 这种代码不支持中文
    这里是详细的中文参数的教程

    调用函数

    好了基础就是这些,下面我们开始真正的调用函数
    函数的标准调用如下:

    	int x;//x为参数数目
    	PyObject* pArgs = PyTuple_New(x);
    	PyTuple_SetItem(pArgs, 0, y);参数为y,设置第一个参数 y为PyObject对象
    	...//这里是设置参数
    	PyObject* pReturn = PyEval_CallObject(pFunc, pArgs);//preturn为返回值
    

    对于这种简单的函数

    def callTest(string):
        print('String is ->:' + string)
        #返回结果
        reStr = 'call Test Succeed'
        return reStr
        ```
        调用代码如下
        ```
        
    #include <Python.h>
    #include <iostream>
    using namespace std;
    int main() {
    
        // 初始化Python虚拟机
        PyObject* pmod, * pfun, * pargs, * preturn;
        Py_Initialize();
        // 判断Python虚拟机是否成功
        if (Py_IsInitialized() == 0) {
            cout<<"fal to initialize Python"<<endl;
            return -1;
        }
        cout << "server start" << endl;
    
        PyRun_SimpleString("import sys");
        PyRun_SimpleString("sys.path.append('.')");
        pmod = PyImport_ImportModule("my_main");//.py文件
        if (!pmod) { cout << "module import error" << endl; }
    
        pfun = PyObject_GetAttrString(pmod, "callTest");//函数名
        if (!pfun)cout << "cfun load errot" << endl;
    
        pargs = PyTuple_New(1);
        PyObject* o1 = PyCodec_Encode(Py_BuildValue("s", "test"), "utf-8", NULL);
        PyTuple_SetItem(pargs, 0, o1);
        preturn = PyObject_CallObject(pfun, pargs);
        char* result = new char[20];
        PyArg_Parse(preturn, "s", &result); 
        cout << result <<endl;
        // 退出Python虚拟机
        Py_Finalize();
        cout << "server end" << endl;
        return 0;
    }
    

    中文来了

    但是上边的函数但凡有中文返回值或者中文参数就会报错或者乱码
    解决方式这里是详细的中文参数的教程
    需要Qt库这里是VS导入的教程
    最好我们的代码如下:

    #include <stdio.h>
    #include <Python.h>
    #include <iostream>
    #include "GBK.h"
    
    using namespace std;
    int main() {
    
        // 初始化Python虚拟机
        PyObject* pmod, * pfun, * pargs, * preturn;
        Py_Initialize();
        // 判断Python虚拟机是否成功
        if (Py_IsInitialized() == 0) {
            cout<<"fal to initialize Python"<<endl;
            return -1;
        }
        cout << "server start" << endl;
    
        PyRun_SimpleString("import sys");
        PyRun_SimpleString("sys.path.append('.')");
        pmod = PyImport_ImportModule("my_main");
        if (!pmod) { cout << "module import error" << endl; }
    
        pfun = PyObject_GetAttrString(pmod, "fanyi_youdao_API_21");
        if (!pfun)cout << "cfun load errot" << endl;
    
        pargs = PyTuple_New(1);
        PyObject* o1 = PyCodec_Encode(Py_BuildValue("s", "Time is the only true unit of measure"), "utf-8", NULL);
    
        PyTuple_SetItem(pargs, 0, o1);
        preturn = PyObject_CallObject(pfun, pargs);
        char* result = new char[20];
        PyArg_Parse(preturn, "s", &result);
        string reStr = GBK::FromUnicode(result);
    
        cout << reStr <<endl;
        // 退出Python虚拟机
        Py_Finalize();
        cout << "server end" << endl;
        return 0;
    }
    

    结果如下:
    运行结果
    更改为中文同样是可以的

        PyObject* o1 = PyCodec_Encode(Py_BuildValue("s", "时间是衡量一切的标准。"), "utf-8", NULL);
    

    这里笔者没有对中文字符decode但是这并不是重点.二者是等价的.
    在这里插入图片描述
    到此就是本节的全部内容了,python的c++接口确实好用,但是还是推荐用Json来数据传输.毕竟c++接口太复杂了,一时间根本无法掌握,各种帖子教程版本不一,很难一时间跑到正确的代码.
    所以说不同语音的交互要尽量使用文件交互,不要想着拿接口

    展开全文
  • 主要介绍了Python如何定义接口和抽象类,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
  • python自动化测试框架,使用request,测试数据统一由excel管理,后期维护只需要修改excel中的测试数据,减少的代码的重复改动,提升测试效率
  • Python接口测试说明及代码实例

    千次阅读 2018-05-05 21:37:18
    Python接口测试说明及代码实例:含各种方法 一、接口说明文档 环境准备: 安装火狐 安装插件: httprequester https://addons.mozilla.org/en-US/firefox/addon/httprequester/  接口返回码: 接口返回code说明...

    Python接口测试说明及代码实例:含各种方法

      一、接口说明文档

      

      环境准备:

      安装火狐

      安装插件: httprequester

      https://addons.mozilla.org/en-US/firefox/addon/httprequester/

      接口返回码:

      接口返回code说明:

      '00' : 成功

      '01':用户已存在

      '02':参数不合法

      '03':参数错误(1、用户信息错误 2、参数错误,数据库中不存在相应数据)

      '999':未知错误,看后台日志

      请求接口例子:

      Md5计算网站:

      http://md5jiami.51240.com/

      1、注册:post方法

      请求地址:http:// 127.0.0.1:8080/register/

      请求内容: {"username":"wulaoshi","password":"a12345678","email":"2055739@qq.com"}

      返回内容:

      {"code": "00", "userid": 5}

      2、登录:post方法

      请求地址:http://127.0.0.1:8080/login/

      请求内容:{"username":"wulaoshi","password":"e9bc0e13a8a16cbb07b175d92a113126"}

      返回内容:{"token": "94beb86afbf126a345b0cdf30e5e5202", "code": "00", "userid": 5, "login_time": "2016-10-13 22:50:24"}

      3、新增博文:post方法

      请求地址:http://127.0.0.1:8080/create/

      请求内容:{"userid":5, "token": "94beb86afbf126a345b0cdf30e5e5202","title":"python", "content":"python port test"}

      返回内容:{"data": [{"content": "python port test", "title": "python"}], "code": "00", "userid": 5}

      4、修改博文:使用put方法

      请求地址:http://127.0.0.1:8080/update/

      请求内容:{"userid":5, "token": "94beb86afbf126a345b0cdf30e5e5202","articleId":11, "title":"gloryroad", "content":"test test!!!!!!!!!!!!!"}

      返回内容:

      {"articleId": 11, "update_time": "2016-10-13 23:11:36", "code": "00", "userid": 5}

      5、查询用户博文:post方法

      请求地址:http://127.0.0.1:8080/getBlogsOfUser/

      请求内容:{"userid":5, "token": "94beb86afbf126a345b0cdf30e5e5202"}

      返回内容:

      {"data": [{"update_time": null, "title": "python", "content": "python port test", "articleId": 11, "owner": 5, "posted_on": "2016-10-13 22:56:49"}], "code": "00", "userid": 5}/

      6、查询博文内容:get方法

      请求地址:http://127.0.0.1:8080/getBlogContent/11

      请求内容:空

      返回内容:{"code": "00", "data": [{"update_time": "2016-10-13 23:11:36", "title": "gloryroad", "content": "test test!!!!!!!!!!!!!", "articleId": 11, "owner": 5, "posted_on": "2016-10-13 22:56:49"}]}/

      7、批量查询博文内容:

      请求地址:http://127.0.0.1:8080/getBlogsContent/articleIds=11,12

      请求内容:空

      返回内容:{"code": "00", "data": [{"update_time": "2016-10-13 23:11:36", "title": "gloryroad", "content": "test test!!!!!!!!!!!!!", "articleId": 11, "owner": 5, "posted_on": "2016-10-13 22:56:49"}, {"update_time": null, "title": "mysql0", "content": "mysql learn 0", "articleId": 12, "owner": 1, "posted_on": "2016-10-13 23:04:35"}]}/

      8、删除博文

      请求地址:http://127.0.0.1:8080/delete/

      请求内容:{"userid":5, "token": "94beb86afbf126a345b0cdf30e5e5202","articleId":[11]}

      返回内容{"articleId": [11], "code": "00", "userid": 5}

      Python2.7 代码实例

      一、登录模块

      1、用户注册

      register

      POST /register

      Parameters:

      

      参数规则说明:

      username:

      1、字母、数字组成

      2、长度2~20位

      3、字母不区分大小写

      password:

      1、长度8~20位

      2、必须含有字母和数字

      email:标准的email规则

      Json串格式参数,示例:{"username":"lily","password":"lily","email":"lily@qq.com"}

      Response:

      {"code": "00", "userid": 2}

      example

      

      importrequests

      importjson

      print"register------"

      data = json.dumps({'username':'lily','password':'wcx123wac','email':'lily@qq.com'}) #

      r = requests.post('http://localhost:8080/register/', data= data)

      print r.status_code

      print r.text

      print type(r.json())

      print str(r.json())

      

      2、用户登录

      login

      POST /login

      

      Json串格式参数,示例:

      {"username":"lily", "password":"0550876efca0820e30e7398c177fd30b"}

      Response:

      {"token": "a1c0738a6cf054606b055a419c3390f3", "code": "00", "userid": 3, "login_time": "2016-09-06 12:02:14"}

      example

      

      importhashlib

      m5 = hashlib.md5()

      m5.update('wcx123wacs')

      pwd = m5.hexdigest()

      print pwd

      print"login------"

      data = json.dumps({'username':'lily','password': pwd}) #

      r = requests.post('http://localhost:8080/login/', data = data)

      

      二、博文编辑模块

      1、新增博文

      create

      POST /create

      

      {"userid":3, "token": "a1c0738a6cf054606b055a419c3390f3", "title":"python", "content":"python port test"}

      Response:

      {"data": [{"content": "python port test", "title": "python"}], "code": "00", "userid": 3}

      example

      

      m5.update('lily')

      print pwd

      print"create post------"

      data = json.dumps({'userid': 1, token:"a1c0738a6cf054606b055a419c3390f3"s,'title':"mysql",'content':'mysql learn'})

      r = requests.post('http://localhost:8080/create/', data = data)

      

      2、修改博文

      update

      POST /update

      

      {"userid":3, "token": "a1c0738a6cf054606b055a419c3390f3", "articleId":11, "title":"python", "content":"test test"}

      Response:

      example

      

      import requests

      import json

      print "query posts of user------"

      data = json.dumps({'userid':3, "token": "a1c0738a6cf054606b055a419c3390f3", 'offset':2, 'lines':3})

      r = requests.post('http://localhost:8080/getBlogsOfUser/', data = data)

      

      3、查询用户的博文

      getBlogsOfUser

      POST /getBlogsOfUser

      

      {"userid":3, "token": "a1c0738a6cf054606b055a419c3390f3"}

      {"userid":3,"token": "a1c0738a6cf054606b055a419c3390f3", "offset":2, "lines":3}

      Response:

      {"data": [{"update_time": null, "title": "oracle", "content": "oracle test", "articleId": 5, "owner": 2, "posted_on": "2016-09-02 14:24:58"}, {"update_time": null, "title": "C", "content": "C test", "articleId": 4, "owner": 2, "posted_on": "2016-09-02 14:24:49"}], "code": "00", "userid": 2}

      example:

      

      print"query posts of user------"

      data = json.dumps({'userid':3,"token":"a1c0738a6cf054606b055a419c3390f3",'offset':2,'lines':3})

      

      4、查询博文内容

      getBlogContent

      POST /getBlogContent

      

      请求地址,示例:

      http://localhost:8080/getBlogContent/1

      Response:

      {"code": "00", "data": [{"update_time": null, "title": "python", "content": "python port test", "articleId": 1, "owner": 2, "posted_on": "2016-09-02 14:24:24"}]}

      example:

      

      print"query post------"

      articleId = 2

      r = requests.get('http://localhost:8080/getBlogContent/'+ str(articleId))

      

      5、批量查询博文

      getBlogsContent

      POST /getBlogsContent

      

      请求地址,示例:

      http://localhost:8080/getBlogsContent/articleIds=1,2,3

      Response:

      {"code": "00", "data": [{"update_time": null, "title": "python", "content": "python port test", "articleId": 1, "owner": 2, "posted_on": "2016-09-02 14:24:24"}, {"update_time": null, "title": "java", "content": "java port test", "articleId": 2, "owner": 2, "posted_on": "2016-09-02 14:24:32"}, {"update_time": null, "title": "C++", "content": "C++ test", "articleId": 3, "owner": 2, "posted_on": "2016-09-02 14:24:42"}]}

      example:

      

      print"query posts by blogId------"

      r = requests.get('http://localhost:8080/getBlogsContent/'+ str("articleIds=1,2,3"))

      

      6、删除博文

      delete

      POST /delete

      

      {"userid":1, "token": "868d26e05666c5aaeb76d361faa7448c", "articleId":[1,2,3]}

      Response:

      {"articleId": [1, 2, 3], "code": "00", "userid": 1}

      example:

      

      print pwd

      print"delete post------"

      data = json.dumps({"userid":1,"token":"868d26e05666c5aaeb76d361faa7448c","articleId":[3,4,5]}) #

      r = requests.delete('http://localhost:8080/delete/', data = data)

      

      说明

      如果在一些接口请求插件(比如httprequester)中请求这些接口时,传参时,键值对间不能存在空格,并且字符串必须用双引号引起来,跟使用Python程序请求有区别。

      

    展开全文
  • 接口自动化测试python源码,都是基于python3 都是基于webdriver,大部分代码都可以通用,只是配置文件不一样 APP监控了常用的men,cpu,fps 数据维护用的YMAL 邮件发送excel的测试报告
  • Python web接口开发与测试(电子版)Python web接口开发与测试(电子版)Python web接口开发与测试(电子版)Python web接口开发与测试(电子版)Python web接口开发与测试(电子版)Python web接口开发与测试(电子...
  • wind客户端python接口 java调用

    千次阅读 2019-02-13 17:27:41
    之前公司业务部门提出需要做wind新债数据对比,原本做的方案是直接从...根据业务要求,查找到wind资讯端 提供的接口,有C、C#、python等其他接口,本人看一下,选择使用python来实现;大概逻辑:业务在web端业务系...

    之前公司业务部门提出需要做wind 新债数据对比,原本做的方案是 直接 从数据中心wind库中获取,但是数据中心wind库,并非实时数据而是 每半个小时由wind 主动推送的数据,业务觉得不满足要求,需要wind 最新实时数据;

    根据业务要求,查找到 wind 资讯端  提供的 接口,有C、C#、python 等其他接口,本人看一下,选择使用python 来实现;大概逻辑:业务在web端 业务系统 填写需要获取的新债信息(wind代码 和 市场),然后由java 程序处理相关逻辑后,调用python提供的http协议get接口, 最后通过python 程序调用 wind接口获取到数据,返回字符串给java 程序,java 程序解析后 在系统上展示 新债信息;

    一、搭建python 环境(建议采用3.0及其以上,3.0以下好像不维护了),本人使用的3.5版本,环境搭建有很多,可以自行百度,也可参考本人另一篇文章;

    二、python 端 代码(本人python零基础,代码规范 语法啥的 不是很会,这是一位同事提供的相关代码)

    注意这里需要 安装相关包:flask、flask_restful;其他如果 运行报错,报什么不存在,可能是包没有安装,可以尝试安装后在运行。

    注意:“WindPy ”这个是 wind 的包,需要在 python 环境中 安装wind 资讯端,安装完成后,在wind终端里面 找到菜单【量化】->【修复插件】-【python】;注意第一次需要 配置python接口信息路径,我的路径是(这里我3.5 和 3.7都安装了,只要一个就可以了):

    配置好后修复一下。 

    python代码:新建python文件 XX.py;

    # -*- coding: utf-8 -*-
    """
    Spyder Editor
    
    This is a temporary script file.
    """
    
    from flask import Flask, request
    from flask_restful import Resource, Api
    from json import dumps
    from flask import jsonify
    from WindPy import w #wind 包
    import logging
    import datetime
    import logging
    
    app = Flask(__name__)
    api = Api(app)
    
    
    class CJHX_Data_Service(Resource):
        def get(self, windcode):
            
            try:
                logging.info('-------call_wind_openapi()--------')
                #调用wind接口,这里先判断是否已经启动了
                if not w.isconnected():
                    w.start()
    
                now = datetime.datetime.now()
                nowday = now.strftime("%Y-%m-%d")
                wed = w.wsd(windcode,"issue_issueprice,agency_trustee,dirtyprice,cleanprice,windl2type,sec_name,trade_code,carrydate,maturitydate,embeddedopt,latestpar,paymenttype,interestfrequency,repaymentmethod,couponrate,taxfree,windcode,redemptiondate,repurchasedate,subordinateornot,taxrate,coupon,interesttype",nowday,nowday,"")
                result = str(wed.Data)
                #w.stop() 这里取消关闭,wind接口每隔120秒会自动关闭,无需手工关闭,避免接口并发时导致程序异常掉 
                return result
            except Exception as e:
              logging.error('call_wind_openapi raise an error ', e)
    
        
    api.add_resource(CJHX_Data_Service, '/api/<windcode>') # Route_3
    
    
    if __name__ == '__main__':
         app.run(port=7788,debug=True,host="0.0.0.0")
         
    #curl http://127.0.0.1:7789/api/8

    代码说明:

    w.wsd()  是wind接口,接口使用 请参考wind接口说明,里面有详细讲解;大概就是 wind代码、需要的wind字段(需要通过wind端获取)、查询开始时间、查询结束时间;

    wind 字段选择:量化-api接口-代码生成器   ;语言选择python,我这里选择第一个日期序列;点击后任意选择一个债券;然后下一个,就可以找中文字段对应的 wind 字段了;

    7788 是端口,这里有你可以任意写,0.0.0.0 代表可以通过ip访问。

    完成后在浏览器输入 http://127.0.01:7788/api/114411.SZ  (114411.SZ 代表wind 代码 + 市场);

    三、java 端代码【没有什么好说,直接看代码吧】

    jar 引用

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.lang.Integer;  
    import java.net.URL;
    import java.net.URLConnection;

    调用的方法

    	public static String windApi(String code,String jysc){
    		String windcode="";
    		String temp="";
    		if("上海".equals(jysc)){
    			windcode = code+".SH";
    		}else if("深圳".equals(jysc)){
    			windcode = code+".SZ";
    		}else if("银行间".equals(jysc)){
    			windcode = code+".IB";
    		}else{
    			return null;
    		}
    		
    		try {  
    			
    		    String endpoint = "http://10.201.9.95:7788/api/"+windcode;  
    			//String endpoint = "http://10.201.224.125:7788/api/"+windcode;
    		    
    			String result = (String) sendGet(endpoint);
    			result=result.replace("\"","");
    		    // 给方法传递参数,并且调用方法  
    		    System.out.println("result is " + result);  
    		    
    		   /***
    		    * 解析接口返回值字符串  这里 我直接返回字符串,做了字符串解析,和中文处理;
    		    */
    		   String str = result.replace("[","");
    		   str = str.replace("]]","");
    		   String[] strs = str.split("],");
    		   
    		   for(int i=0;i<strs.length;i++){
    			   String t = strs[i].replace("u'","");
    			   t=t.replace("'","");
    			   t=t.replace(" ","");
    			   if(t.split("datetime").length>2){
    				  t= getUnTime(t);
    			   }
    			   if(i==0){
    				   temp=unicodeToCn(t);
    			   }else{
    				   temp=temp+","+unicodeToCn(t);
    			   }
    		   }
    		   
    		    System.out.println(temp);
    		} catch (Exception e) {  
    		    System.err.println(e.toString());  
    		}   
    		return temp;
    	}

    其他辅助方法:

    /**
    	 * 解析wind 时间返回值
    	 * @param t
    	 * @return 数字类型时间
    	 */
    	public static String getUnTime(String t){
    		String a = t.replace("datetime","");
    	    String[] f = a.split(",");
    	    String year = f[0].replace("(","").replace(".","");
    	    String mm = f[1].length()<2?"0"+f[1]:f[1];
    	    String dd = f[2].length()<2?"0"+f[2]:f[2];
    	    t=year+""+mm+""+dd;
    	    return t;
    	}
    	public static String getNumTime(String t){
    		String[] f = t.split("-");
    		String year = f[0];
    	    String mm = f[1].length()<2?"0"+f[1]:f[1];
    	    String dd = f[2].length()<2?"0"+f[2]:f[2];
    	    t=year+""+mm+""+dd;
    		return t;
    	}
    	
    	
    	/**
    	 * 解析uncode编码 中文  u'18\u9633\u716404'
    	 * @param unicode
    	 * @return
    	 */
    	private static String unicodeToCn(String unicode) {
            /** 以 \ u 分割,因为java注释也能识别unicode,因此中间加了一个空格*/
            String[] strs = unicode.split("\\\\u");
            String returnStr = "";
            //必须包含\\u 否则原样输出
            if(strs.length<2){
            	return unicode;
            }
            for (int i = 0; i < strs.length; i++) {
              String t = strs[i];
              //非中文则没有被编码,例如数字在前,目前不考虑大于四位的情况
              if(t.length()<4){
            	  returnStr +=t;
            	  continue;
              }
              String s = "";
              //非中文则没有被编码,例如数字在后
              if(t.length()>4){
            	  s =t.substring(4, t.length());
            	  t =t.substring(0, 4);
              }
              returnStr += (char) Integer.valueOf(t, 16).intValue() +s;
            }
            return returnStr;
        }
    	public static String getNumber(String s){
    		String a = s.split("\\.")[0];
    		if(Double.parseDouble(s) == Double.parseDouble(a)){
    			return a;
    		}else{
    			return s;
    		}
    	}
    	//发送GET请求
        public static String sendGet(String url) {
            String result = "";
            BufferedReader in = null;
            try {
                String urlName = url;
                URL realUrl = new URL(urlName);
                URLConnection conn = realUrl.openConnection();// 打开和URL之间的连接
                conn.setRequestProperty("accept", "*/*");// 设置通用的请求属性
                conn.setRequestProperty("connection", "Keep-Alive");
                conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
                conn.setConnectTimeout(4000);
                conn.connect();// 建立实际的连接
                in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));// 定义BufferedReader输入流来读取URL的响应
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
            } catch (Exception e) {
                System.out.println("发送GET请求出现异常!" + e);
            } finally {// 使用finally块来关闭输入流
                try {
                    if (in != null) {
                        in.close();
                    }
                } catch (Exception ex) {
                    System.out.println("关闭流异常");
                }
            }
            return result;
        }

    四、写一个main方法执行调用就行了,注意要先运行python程序;

    如果报错  请跟进报错解决吧,我貌似没有遇到什么问题;

    在ip访问遇到了一个问题,启动了多个python ,导致ip访问不生效,把其他的相同端口python杀死就行了,

    public static void main(String[] args) {
    		windApi("114411","深圳");
    		
    	}

     

     

    展开全文
  • Python接口自动化之Token详解及应用

    千次阅读 2020-04-17 07:30:00
    ——————·今天距2021年258天·——————这是ITester软件测试小栈第113次推文在上一篇Python接口自动化测试系列文章:Python接口自动化之cookie、sess...
  • 今天小编就为大家分享一篇python:接口间数据传递与调用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • python 接口 经典定义(必记)

    千次阅读 2019-05-29 14:55:00
    总结几个经典的接口定义,每个都有依据
  • python接口自动化实战(框架)

    万次阅读 多人点赞 2018-03-10 23:00:36
    python接口测试的原理,就不解释了,百度一大堆。 先看目录,可能这个框架比较简单,但是麻雀虽小五脏俱全。各个文件夹下的文件如下:一.理清思路 我这个自动化框架要实现什么 1.从excel里面提取测试用例 2.测试...
  • Halcon20.11 Python接口使用步骤演示

    千次阅读 2020-12-02 20:52:37
    近几年随着深度学习的发展Python也越来越火了,那么作为专业的视觉软件--Halcon20.11也提供了Python接口的支持,下面简单介绍一下Halcon/ Python接口的使用步骤并做demo演示。 (1) Halcon Python接口使用文档(官网...
  • pyhanlp:hanlp的python接口

    千次阅读 2019-04-12 10:10:45
    HanLP的Python接口,支持自动下载与升级HanLP,兼容py2、py3。 安装 pip install pyhanlp 使用命令hanlp来验证安装,如因网络等原因自动安装失败,可参考手动配置或Windows指南。 命令行 中文分词 使用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 434,061
精华内容 173,624
关键字:

python接口

python 订阅