该部分记录如何获取预期结果-接口响应数据,分成两步:

1 获取数据源接口数据

2 提取后续页面对比中要用到的数据

并且为了便于后续调用,将接口相关的都封装到ProjectApi类中。

新建python包:apiclass 》 新建python file:api_fund。所有接口相关的操作均放到该文件中。隐去项目相关信息后的代码如下:

1 获取数据源接口数据

#coding:utf-8

importrequestsfrom common.round_rewrite import round_rewrite #from common.jsonp_to_json import jsonp_to_json #点击查看该函数 jsonp转成json

classFund:

fund_api_url= '接口地址url'

"""四个原始数据接口"""

def api_strategy(self,day=''):"""接口1"""url= Fund.fund_api_url+'api1.json'response= requests.get(url,params={"day":day}).json()returnresponsedefapi_lastestinfo(self,code):"""接口2"""url= Fund.fund_api_url+'latestInfo/{0}.json'.format(code)

response=requests.get(url).json()returnresponsedefapi_trends(self,code,pattern,period):"""接口3"""identifier= "{code}_{pattern}_{period}".format(code=code,pattern=pattern,period=period)

url= Fund.fund_api_url+"trends/{0}.json".format(identifier)

jsonpstr=requests.get(url).text

jsonstr=jsonp_to_json(jsonpstr)returnjsonstrdefapi_timeline(self,code):"""接口4"""url= Fund.fund_api_url+"timeline/{0}.json".format(code)

response=requests.get(url).json()return response

2 提取后续页面对比中要用到的数据

接口1比较特别,返回数据是一个list,按时间升序排列。有的页面需要取最早的数据,有的页面取最新的数据。

1 用一个参数来标识,该参数设置成list切片步长。1从前往后去,-1从后往前取。

2 samples是一个dict组成的list,要取出每一个dict里的values

samples = sorted([list(ele.values()) for ele in samples]) #转变成与页面数据一致的格式

def get_fund_strategy(self,code,day='',latest=1):"""提取接口1的数据

latest:1-取最早的数据;-1-取最新的数据"""fund_strategy= self.api_strategy(day) #获取策略配置接口数据,day之后的数据都会取出来

for ele in fund_strategy[::latest]: #1从前往后取最早,-1从后往前取最新

if ele["code"] ==code:

self.code= ele["code"]

self.name= ele["name"]

self.summary= ele["summary"]

self.memo= ele["memo"]

samples= ele["samples"]

self.samples= sorted([list(ele.values()) for ele in samples]) #转变成与页面数据一致的格式

return #取到则退出循环

接口2:一个页面只需要3M的数据,单独写了一个函数; 另一个页面需要全量数据。

defget_fund_latestinfo(self,code):"""提取接口2的数据"""fund_lastestinfo=self.api_lastestinfo(code)

nav= fund_lastestinfo["nav"]

navDate= fund_lastestinfo["navDate"][-5:]

navChange= fund_lastestinfo["navChange"]

annualChangeAll= fund_lastestinfo["annualChangeAll"]

self.navlist=[nav,navDate,navChange,annualChangeAll]

percents= fund_lastestinfo["percents"]

self.percents_list= [list(ele.values())[1:] for ele in percents]

defget_fund_percentM3(self,code):"""获取3个月收益率,首页有该数据"""fund_lastestinfo=self.api_lastestinfo(code)

self.percentM3=fund_lastestinfo["percents"][0]["percentM3"]return self.percentM3

接口3:需要对数值进行判断,当数值>=0,显示超出,否则跑输。

sharprun = "超出" if self.sharpeDiff >= 0 else "跑输"

将列表里的每一个字典的key转成中文,方便与页面数据对比

self.trends = map(lambda line: {"日期":line["date"],"组合市值":line["mv"],"比较基准市值":line["bmv"]},trends) #列表里的字典key英文转成中文

defget_fund_trends(self,code,pattern,peroid):"""提取接口3的数据"""fund_trends= self.api_trends(code, pattern, peroid) #请求接口数据

"""获取接口字段值"""self.percent= fund_trends["percent"]

self.percentDiff= fund_trends["percentDiff"]

self.maxDown= fund_trends["maxDown"]

self.mdStart= fund_trends["mdStart"]

self.mdEnd= fund_trends["mdEnd"]

self.startDate= fund_trends["startDate"]try:

self.sharpe= fund_trends["sharpe"]

self.sharpeDiff= fund_trends["sharpeDiff"]

sharprun= "超出" if self.sharpeDiff >= 0 else "跑输"percentRun= "超出" if self.percentDiff >= 0 else "跑输"sharpeDiff=abs(self.sharpeDiff)except KeyError: #夏普比率跨年时今年以来接口无数据,置为空

sharpe = sharpeDiff = sharprun = percentRun = ""trends= fund_trends["trends"] #组合涨幅走势数据

self.trends = map(lambda line: {"日期":line["date"],"组合市值":line["mv"],"比较基准市值":line["bmv"]},trends) #列表里的字典key英文转成中文

result=[code,self.startDate, percentRun, abs(self.percentDiff), self.percent,

self.maxDown,sharprun, sharpeDiff, self.sharpe, self.mdStart, self.mdEnd]#与页面一样的格式

returnresult

接口4:需要取当前和昨天的值计算涨跌幅,并保留2位小数

"""提取原始接口中页面所需数据"""

defget_fund_timeline(self,code):"""提取接口4的数据"""fund_timeline=self.api_timeline(code)

last= fund_timeline["last"]

date= fund_timeline["date"]

current= fund_timeline["current"]

timeline= fund_timeline["timeline"]

rate= (current - last) / last * 100timeline_current= dict(日期=date,实时估值=current,估值涨幅=round_rewrite(rate,2))

timeline_list=[]for tl in timeline: #分时数据

dt = tl["dt"]

nav= tl["nav"]

rt= (nav - last) / last * 100timelinedata= dict(时间=dt,估值=nav,涨跌幅=round_rewrite(rt,2))

timeline_list.append(timelinedata)return timeline_current,timeline_list

最后一部分,因页面图形无法自动化验证,手工测试相关的函数:

defmannualtest_timeline(self):"""分时图手工测试"""

print('code:00X00Y')

scode= input("获取实时估值 输入code")try:"""实时估值"""current, timeline=self.get_fund_timeline(scode)print("实时估值:", current)print("分时图数据:")for line intimeline:print(line)exceptException as e:print(e)

defmannualtest_trends(self):"""走势图手工测试"""

print('code:00X00Y')

scode= input("获取组合走势图形数据:请输入code\n")

pattern= input("投资方式 W(默认) K\n")

peroiddict= {'1': 'R1M', '2': 'R3M', '3': 'R6M','5': 'R1Y', '6': 'R3Y'}

peroid= input("投资期限输入对应数字 %s\n"%peroiddict)

peroid=peroid.strip()

pattern= pattern.strip().upper()#去除左右空格后转大写

if pattern != 'K':

pattern= 'W'#只要不等于K,则默认W

if peroid inperoiddict.keys():

peroid= peroiddict[peroid] #在字典里则取对应值

else:

peroid= 'R1M' #不在字典取默认R1M

try:

self.get_fund_trends(scode, pattern, peroid)#获取接口数据

print("组合走势图{scode}_{pattern}_{peroid}".format(scode=scode,pattern=pattern,peroid=peroid))for line inself.trends:print(line)exceptException as e:print(e)

the end!

python数据接口获取数据_python UI自动化实战记录二:请求接口数据并提取数据相关推荐

  1. python ui自动化配置文件,python UI自动化实战记录八:添加配置

    添加配置文件写入测试地址等,当环境切换时只需修改配置文件即可. 1 在项目目录下添加文件 config.ini 写入: [Domain] domain = http://test.domain.cn ...

  2. python +opencv 根据图片定位进行UI自动化

    python +opencv 根据图片定位进行UI自动化 前言: 做过移动端ui自动化的小伙伴,就会发现很多控件的元素是一样的或者是找不到的,为了解决这个痛点,于是通过图片灰度处理返回坐标x,y找到控 ...

  3. 【社区图书馆】《网络工程师的Python之路:网络运维自动化实战(第2版)》

    文章目录 图书前言 图书简介 图书作者.简介 图书好评 图书目录 总结:本人选择此图书的意义 图书前言 光阴似箭,岁月如梭.转眼之间,距离本书最早的电子书出版已经过去了三年之久.承蒙广大读者的厚爱,电 ...

  4. appium+python闲鱼采购自动化实战(二)

    appium+python闲鱼采购自动化实战(二) appium+python闲鱼采购自动化实战 appium+python闲鱼采购自动化实战(二) 三.环境搭建 2.android-sdk安装和设置 ...

  5. SketchUp的自动化实战 (二)获取内部空间

    SketchUp的自动化实战 (二)获取内部空间 之前在做光伏插件的时候用到了投影功能, 投影功能有很多应用场景, 今天我们来制作一个获取柜体 内部空间 的插件. 获取柜体内部空间 ▼ (获取内部抠门 ...

  6. python爬b站评论_Python爬虫入门教程 32-100 B站博人传评论数据抓取 scrapy

    1. B站博人传评论数据爬取简介 今天想了半天不知道抓啥,去B站看跳舞的小姐姐,忽然看到了评论,那就抓取一下B站的评论数据,视频动画那么多,也不知道抓取哪个,选了一个博人传跟火影相关的,抓取看看.网址 ...

  7. python requests post 二进制流_Python的requests如何同时post图片二进制流和json数据application/octet-stream...

    如何用post的方法以application/octet-stream的content-type提交json和文件呢,总是说文件类型错误 写入图片 该接口用于根据 spreadsheetToken 和 ...

  8. python遍历数组获取下标_python获取list下标及其值的简单方法

    python列表知道下标怎么取值在python中,如果知道列表下标,可以直接通过下标法(列表名[下标])来在python中,如果知道列表下标,可以直接通过下标法(列表名[下标])来取出该下标对应的列表 ...

  9. selenium UI自动化实战

    创建了一个测试群,大家相互总结资料分享最新得技术,目前群里面云集大量得大厂测开,问题基本都能解决 ,加我好友加入哦 总结得资料分为面经与技术文档总结 面试总结包含:linux.mysql.python ...

最新文章

  1. 霍夫变换检测圆c 语言,c – 使用Hough变换检测圆
  2. [云炬python3玩转机器学习] 5-3简单线性回归的实现
  3. 各种框架实现了经典的 todo 应用
  4. LibreOJ - 3083 与或和(单调栈+位运算)
  5. SAP Fiori : Response from creating in local store
  6. android 自动化测试之monkeyrunner学习(三),自动化测试之Monkeyrunner
  7. mybatis中使用in查询时的注意事项
  8. 【Python】Pycharm中plot绘图不能显示
  9. MSP430学习小结3-MSP430基本时钟模块
  10. 转【es中数据节点和主机】
  11. tiledmap 图块属性_TiledMap地图使用
  12. greenshot滚屏截图_Greenshot是一款免费的轻量级屏幕截图实用程序,具有许多有用的功能...
  13. 使用DataV制作实时销售数据可视化大屏
  14. python 点对点语音,Python(PyS60)实现简单语音整点报时
  15. Autoware 1.14(WSL2) 与LG SVL Simulator(Win11)联合仿真
  16. 关于nginx指向nacos遇到的坑
  17. 做php的灯就灭,121128 还原 我是做PHP的,女嘉宾把灯全灭了 真相
  18. ps流 转发_一种国标PS流转RTMP直播流的实时转换方法与流程
  19. 【论文精读】resnet精读
  20. eclipse插件安装失败的列表如何清除-一个困扰很久的问题

热门文章

  1. 英特尔cpu发布时间表_10纳米来了:英特尔十一代酷睿,性能升20%,AI算力乘5倍...
  2. 彩云小译怎么翻译网页_谷歌、百度、有道做不到的,统统交给这5款翻译工具!...
  3. SparkSQL读取文件时,数据字段类型调整
  4. springboot 启动原理
  5. 十四、中文词向量训练一
  6. 我学习Python的三个神级网站
  7. 数据分析师被老板问住了——场面一度非常尴尬。
  8. 分享珍藏很久的Python学习知识手册
  9. matlab波特图带延迟的传递函数,matlab实现波特图
  10. [題解](并查集)luogu_P2391 白雪皚皚