范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

API测试用例的编写

  在API的自动化测试维度中,测试维度分为两个维度,一个是单独的对API的验证,客户端发送一个请求后,服务端得到客户端的请求并且响应回复给客户端;另外一个维度是基于业务场景的测试,基于业务场景的也就是说编编写的API的测试用例是基于产品的业务逻辑,关于这点在我出版的书《Python自动化测试实战》测试案例实战中都有丰富的代码案例,这里就不详细的再说明。抛开两个维度的思考点,作为测试团队的工作内容,首先要保障产品的业务逻辑是可以使用的,只要这样,产品才能够给客户带来价值,在基本的业务逻辑稳定的基础上,再一步需要思考的是整个系统的稳定性,抗压性和系统的承载负载的能力。那么在工程效率的角度上来思考,使用代码或者工具都不是核心,核心是如何使用这些工具或者代码来提升测试的效率,优化研发的流程,并持续的改进,从而达到过程中的改进。不管工具还是代码,对产品完整性的测试,都要考虑产品的业务逻辑,也就是产品的场景,而如何通过API的自动化测试方式来达到产品的业务场景的测试,在单元测试框架的视频里面我特别的说到了七个点,每个点都举了案例,其中最核心的一个点就是编写的每个测试用例都必须得有断言同时基于API的测试要基于产品的业务逻辑来进行,而单纯的测试API是没有多少意义的,比如一个登录的业务场景,登录接口好的就能够证明登录的业务场景是好的吗?很显然不能。
  我们还是依据具体的案例代码来分析,如下的案例代码业务为依据接口可以获取到所有的书籍信息,可以创建数据,查看某一本书的信息,修改它的信息和删除书籍,案例代码为:#!/usr/bin/env python# -*-coding:utf-8 -*-from flask import  Flask,redirect,render_template,url_for,request,jsonify,abort,make_response from flask_restful import  Resource,Api from flask_httpauth import  HTTPBasicAuth   app=Flask(__name__) api=Api(app=app)  auth=HTTPBasicAuth()  @auth.get_passworddef get_password(name):     if name=="wuya":         return "admin"@auth.error_handlerdef authorized():     return make_response(jsonify({"error":"请认证"}),401)   books=[     {         "id":1,        "author":"无涯",        "name":"Python自动化测试实战",        "done":True    },    {         "id": 2,        "aurhor":"无涯",        "name": "Python测试开发实战",        "done":False    } ]  class BooksApi(Resource):     def get(self):         return jsonify(books)      def post(self):         if not request.json or not "author" in request.json:             abort(400)         book={             "id": books[-1]["id"] + 1,            # "author":request.json["author"],            "author": request.json.get("author"),            "name": request.json.get("name"),            "done": False        }         books.append(book)         return jsonify({"status":0,"msg":"创建书籍成功","datas":book})  class BookApi(Resource):     def get(self,book_id):         book=list(filter(lambda t:t["id"]==book_id,books))         if len(book)==0:             abort(400)         else:             return jsonify({"status":0,"msg":"ok","datas":book})      def put(self,book_id):         book=list(filter(lambda t:t["id"]==book_id,books))         if len(book)==0:             abort(404)         elif not request.json:             abort(400)         elif "author" not in request.json:             abort(400)         elif "done" not in request.json and type(request.json["done"]) is not bool:             abort(400)         book[0]["author"]=request.json.get("author",book[0]["author"])         book[0]["name"] = request.json.get("name", book[0]["name"])         book[0]["done"] = request.json.get("done", book[0]["done"])         return jsonify({"status":0,"msg":"修改成功","datas":book})      def delete(self,book_id):         book = list(filter(lambda t: t["id"] == book_id, books))         if len(book)==0:             abort(404)         books.remove(book[0])         return jsonify({"status":1001,"msg":"删除成功"})  api.add_resource(BooksApi,"/v1/api/books",endpoint="/v1/api/books") api.add_resource(BookApi,"/v1/api/book/")  if __name__ == "__main__":     app.run(debug=True)
  依据上面的信息,涉及到的测试点非常多,但是主要可以考虑这么几点,分别是创建书籍信息,查看创建的书籍信息,对创建的书籍信息进行修改,和最后删除创建的书籍信息,那么编写这样的API测试用例的编写,也可以从两个维度思考,第一个维度是基于业务场景,也就是说编写的API测试使例它是有顺序的,分别是创建,查看,修改,和删除,见API的测试代码:#!/usr/bin/python3#coding:utf-8import  pytest import  requests   def writeBook(bookID):    with open("bookID","w") as f:       f.write(bookID)  def readBookID():    with open("bookID","r") as f:       return int(f.read())  def test_001_addBook():    """创建书籍"""   dict1={"author":"无涯","name":"Python自动化测试实战","done":True}    r=requests.post(       url="http://127.0.0.1:5000/v1/api/books",      json=dict1)    writeBook(str(r.json()["datas"]["id"]))    assert r.json()["datas"]["author"]=="无涯"def test_002_queryBook():    """查看创建的书籍信息"""   r=requests.get(       url="http://127.0.0.1:5000/v1/api/book/{0}".format(readBookID()))    assert r.json()["datas"][0]["id"]==readBookID()   def test_003_setBook():    """修改书籍信息"""   dict1 = {"author": "无涯课堂", "name": "Python自动化测试实战", "done": True}    r=requests.put(       url="http://127.0.0.1:5000/v1/api/book/{0}".format(readBookID()),      json=dict1)    assert r.json()["datas"][0]["author"]=="无涯课堂"def test_004_delBook():    """删除书籍信息"""   r=requests.delete(       url="http://127.0.0.1:5000/v1/api/book/{0}".format(readBookID()))    assert  r.json()["status"]==1001
  查看如上的测试代码后,可以看到刚才说的测试场景都已包含进去,执行后输出的结果信息:
  依据执行后输出的结果信息,可以看到它是按我们设计的顺序的,这样的测试点符合我们的设计思路,但是存在的缺点也是,比如业务逻辑发生变化,可以批量添加课程,那么这个测试点应该放在哪里了?按照之前的设计思路,只能放在第二位,因为测试用例它是按顺序执行的,很显然它会打乱已经有的执行顺序,当然对链路很长的测试点来说,这样写也没什么错误。下面再看另外一种思路,就是测试用例之间是没有顺序的,这样就可以很好的解决上面说的,批量增加,批量修改或者批量删除也好,测试点是无顺序的,所以增加或者建=减少测试点,也是无所谓的,修改后的测试点见如下:#!/usr/bin/python3#coding:utf-8import  pytest import  requests  def writeBook(bookID):    with open("bookID","w") as f:       f.write(bookID)  def readBookID():    with open("bookID","r") as f:       return int(f.read())  def addBook():    dict1={"author":"无涯","name":"Python自动化测试实战","done":True}    r=requests.post(       url="http://127.0.0.1:5000/v1/api/books",      json=dict1)    writeBook(str(r.json()["datas"]["id"]))    return r  def queryBook():    r=requests.get(       url="http://127.0.0.1:5000/v1/api/book/{0}".format(readBookID()))    return r  def setBook():    dict1 = {"author": "无涯课堂", "name": "Python自动化测试实战", "done": True}    r=requests.put(       url="http://127.0.0.1:5000/v1/api/book/{0}".format(readBookID()),      json=dict1)    return r  def delBook():    r=requests.delete(       url="http://127.0.0.1:5000/v1/api/book/{0}".format(readBookID()))    return r   def test_addBook():    """创建书籍"""   r=addBook()    delBook()    assert r.json()["datas"]["author"]=="无涯"def test_queryBook():    """查看创建的书籍信息"""   addBook()    r=queryBook()    delBook()    assert r.json()["datas"][0]["id"]==readBookID()  def test_updateBook():    """修改书籍信息"""   addBook()    r=setBook()    delBook()    assert r.json()["datas"][0]["author"]=="无涯课堂"def test_delBook():    """删除书籍信息"""   addBook()    r=delBook()    assert  r.json()["status"]==1001
  修改后的测试用例之间执行是无顺序的,我们并不在乎哪个测试点先执行,哪个后执行,每个测试点之间都是独立的,也不互相依赖同时也是基于业务场景的测试。

金蝶打造数字战斗力兵工厂,助500强企业数字化升级近年来,互联网大数据云计算人工智能区块链等技术加速创新,日益融入经济社会发展各领域全过程,数字经济发展速度之快辐射范围之广影响程度之深前所未有,正在成为重组全球要素资源重塑全球经济财商快报宗庆后呼吁所有企业涨工资宁德时代成立新能源科技公司字节回应裁员大家好今天是10月20日,星期三来看看有哪些大事儿值得闽商们关注闽企1宁德时代成立新能源科技公司,注册资本20亿10月19日,宜春时代新能源科技有限公司成立,经营范围包括新兴能源技网易百度今日头条UC腾讯趣头条,同时向你推送了一条相同的消息,你点开谁?感谢您的阅读!可能如果这几大平台推送消息的话,可能会提前排除百度,毕竟百度因为莆田系广告的影响,会让我们对于百度有所保留腾讯,UC,网易虽然是老牌资讯类App网站,但是腾讯和UC依字节又投了两家半导体公司一家为造芯,一家指向元宇宙近日,字节跳动相继入股了两家半导体公司云脉芯联光舟半导体。表面上看都是半导体领域的投资,但对应的赛道布局却迥然不同。从今年3月回应有造芯计划开始,字节在半导体领域就有所动作。这次投因果关系真存在吗?事物的因果关系是一般规律,不是普遍规律,也就是说,因果关系是存在的。但也有个例。象人们常说的,好人命不长。坏人活百岁的。按照因果关系,应该是好人活百岁,坏人命不长。这就是个例。所谓工信部主要互联网企业开屏信息关不掉问题基本解决10月19日,国新办就2021年前三季度工业和信息化发展情况举行发布会。工业和信息化部新闻发言人信息通信管理局局长赵志国在会上表示,整治开屏弹窗信息,对开屏弹窗信息关不掉乱跳转,用全球工业互联网大会行业专家为传统企业数字蝶变把脉中新社沈阳10月19日电(李晛王景巍)以赋能高质量打造新动能为主题的2021全球工业互联网大会19日继续在辽宁沈阳进行。全球顶尖行业专家和领军企业代表会聚于此,围绕传统企业数字蝶变中国云为中非企业数字化转型提速来源人民网人民网约翰内斯堡10月19日电(记者王磊)随着非洲大陆自由贸易区的成立,越来越多中国企业走向非洲,参与中非合作。新冠疫情下,非洲各行各业数字化转型大幅提速,让上网成为非洲为什么操作系统不能屏蔽底层的架构(arm,x86,mips),为应用软件提供一个统一的运行环境呢?可以的,java环境就是干这个的,但因为不能二进制编译,效率比原生的低。当然二进制编译也是可以的,但如果没有工具,对开发者将是非常大的挑战。华为方舟编译器就是朝着这个方向在努力,把滴滴背后权利滔天?又为何匆匆赴美?七部门又为何联合调查?滴滴出行是不是已经深入到每一个人的生活中了呢?相信很多网友对滴滴很好奇当时七大部门联合对滴滴进行调查,但是时隔两个多月却一点结果都没有滴滴背后的势力都有谁呢?滴滴又为何会被七大部门现在实体经济不行为什么怪淘宝电商?之前就有很多人在说淘宝不死中国不富活了电商死了实体,说的大概意思就是淘宝引爆了价格大战,阻碍了中国创造的发展,把原本合理的行业搞成了恶性竞争,最终影响了中国实体经济的发展。因此引发
DMi超混加持,3。5升油耗的比亚迪秦Plus成油车终结者2021年1月11日,比亚迪发布了极致省油的DMi超级混动技术,搭载该技术的秦Plus馈电标称油耗则可达到3。8升百公里。3。8升百公里的数据怎么来的,适用于大部分驾驶场景吗,宣传特斯拉Model2渲染图曝光,16万人民币起售近日,外媒爆料,特斯拉正打算针对中国市场推出一款全新的车型,该车型的定位将低于Model3,或命名为Model2,售价约16万20万元人民币。从图片来看,Model2整体的设计语言大众公布EV旗舰新品车型细节通过OTA实现L4大众汽车始终专注于推出消费者负担得起的电动汽车,但据报道,这家德国品牌正计划在不久的将来通过一项名为ProjectTrinity的旗舰车型来展示其在电动车领域的权威性。近日,大众汽全球车企爆发芯片危机,奥迪福特斯巴鲁等部分汽车工厂关停受到疫情影响,全球半导体行业产能下降,如今缺少芯片的情况,已经不止停留在手机电脑等数码产品,汽车行业也开始受到冲击。近期,车企因缺少芯片而不得不减产甚至关停工厂的新闻频频登上媒体报PPT成真,特斯拉展示4680电池产线,续航里程增加16近日,特斯拉官方公布了一段视频,展示了预热许久的4680新型电池生产线。对此,特斯拉CEO埃隆马斯克表示,由于特斯拉的电池产线灵感来源于批量生产行业,因此,未来特斯拉将以生产玩具汽三星S21加入汽车连接联盟,可用UWB钥匙开启奥迪宝马福特昨天,宝马宣布将为2021款新车增加对增强版UWB数字钥匙的支持,iPhone及AppleWatch将可以实现较远距离开启。如今,三星也宣布与奥迪宝马福特及杰恩斯达成合作,为消费者大众CEO开通推特账号,第一件事就是向特斯拉的马斯克发战书在过去的2020年,美国电动汽车厂商一直在忙着建设德国工厂,而德国是老牌汽车品牌大众的主场,这口气自然咽不下。近日,大众汽车CEO似乎坐不住了,在特斯拉CEO埃隆。马斯克的主场进行新能源汽车逆袭蔚来市值暴涨18倍,特斯拉成全球第一车企2020年,疫情对全球汽车行业造成了巨大的冲击,行业经历了有史以来最大规模的停产。但从下半年开始,全球汽车行业迎来了复苏,供需端迅速回暖。对于上市车企而言,得益于汽车电动化转型步伐德系车比日系车皮实?媒体实测大众速腾对撞卡罗拉,谁又翻车了汽车爱好者中有一种说法,德系车厚实耐撞,日系车皮薄吸震。关于日系车和德系车谁的安全系数更高,民间一直存在不同的声音。在去年中保研的碰撞测试里,德系的大众车型可谓全线翻车,迈腾途观,特斯拉柏林超级工厂获批,首先量产ModelY和4680电池特斯拉CEO马斯克此前曾表示,将令柏林的电池生产工厂年产能达到100GWh,甚至可能扩大到200250GWh。这个数据有多么夸张?100GWh已经是目前全球最大电池工厂特斯拉内华达目标ModelY,大众ID。4CROZZ售价19万起2020年新能源汽车发展迅猛,而传统燃油车品牌中,大众应对电动化转型积极,推出了MEB全新电动平台拥抱汽车智能化。2020年11月3日,大众正式公布了国产电动汽车ID。4CROZZ