专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

golang集成测试dockertesttestcontai

  头条创作挑战赛
  在做集成测试的时候,每次测试前,如果通过docker重启一个干净的容器是不是免去了数据清理的苦恼。https:github。comtestcontainerstestcontainersgo和https:github。comorydockertest可以解决我们的苦恼,它们很相似都是调用docker的api实现镜像的拉取和容器的启动关闭。然后我们可以基于容器做对应的集成测试。
  由于每次拉取镜像和启动docker代价比较大,比较耗时,我们一般在单测的入口TestMain方法里做初始化,也就是一个模块进行一次容器初始化。由于单测case之间没有数据的清理,因此我们每个单测结束后都需要注意清理和还原数据。整体来说dockertesttestcontainersgo原理和使用方法比较类似。下面我们体验一下用法,首先我们需要启动dockerdockerversionVersion:20。10。12
  dockertestpackagedockertesttestimport(databasesqlfmtlogostestinggithub。comgosqldrivermysqlgithub。comorydockertestv3)vardbsql。DBfuncTestMain(mtesting。M){usesasensibledefaultonwindows(tcphttp)andlinuxosx(socket)pool,err:dockertest。NewPool()iferr!nil{log。Fatalf(Couldnotconstructpool:s,err)}usespooltotrytoconnecttoDockererrpool。Client。Ping()iferr!nil{log。Fatalf(CouldnotconnecttoDocker:s,err)}pullsanimage,createsacontainerbasedonitandrunsitresource,err:pool。Run(mysql,5。7,〔〕string{MYSQLROOTPASSWORDsecret})iferr!nil{log。Fatalf(Couldnotstartresource:s,err)}exponentialbackoffretry,becausetheapplicationinthecontainermightnotbereadytoacceptconnectionsyetiferr:pool。Retry(func()error{varerrerrordb,errsql。Open(mysql,fmt。Sprintf(root:secret(localhost:s)mysql,resource。GetPort(3306tcp)))iferr!nil{returnerr}returndb。Ping()});err!nil{log。Fatalf(Couldnotconnecttodatabase:s,err)}code:m。Run()Youcantdeferthisbecauseos。Exitdoesntcarefordeferiferr:pool。Purge(resource);err!nil{log。Fatalf(Couldnotpurgeresource:s,err)}os。Exit(code)}funcTestSomething(ttesting。T){varCREATETABLECREATETABLEstudent(sidINT(10)NOTNULLAUTOINCREMENT,snameVARCHAR(64)NULLDEFAULTNULL,ageINT(10)DEFAULTNULL,PRIMARYKEY(sid))ENGINEInnoDBDEFAULTCHARSETutf8;varINSERTDATAINSERTINTOstudent(sid,sname,age)VALUES(?,?,?);varQUERYDATASELECTFROMstudent;db。Query(createdatabasetest;)db。Query(usetest;),err:db。Exec(CREATETABLE)fmt。Println(err)db。Exec(INSERTDATA,1,唐僧,30)查询数据rows,err:db。Query(QUERYDATA)iferr!nil{fmt。Println(err)}forrows。Next(){varnamestringvaridintvarageintiferr:rows。Scan(id,name,age);err!nil{fmt。Println(err)}fmt。Printf(sisd,name,age)}}
  testcontainersgopackageexp1import(contextfmttestingtimegithub。comgoredisredisv8github。comgoogleuuidgithub。comstretchrtestifyrequiregithub。comtestcontainerstestcontainersgogithub。comtestcontainerstestcontainersgowait)typeredisContainerstruct{testcontainers。ContainerURIstring}funcsetupRedis(ctxcontext。Context)(redisContainer,error){req:testcontainers。ContainerRequest{Image:redis:6,ExposedPorts:〔〕string{6379tcp},WaitingFor:wait。ForLog(Readytoacceptconnections),}container,err:testcontainers。GenericContainer(ctx,testcontainers。GenericContainerRequest{ContainerRequest:req,Started:true,})iferr!nil{returnnil,err}mappedPort,err:container。MappedPort(ctx,6379)iferr!nil{returnnil,err}hostIP,err:container。Host(ctx)iferr!nil{returnnil,err}uri:fmt。Sprintf(redis:s:s,hostIP,mappedPort。Port())returnredisContainer{Container:container,URI:uri},nil}funcTestIntegrationSetGet(ttesting。T){iftesting。Short(){t。Skip(Skippingintegrationtest)}ctx:context。Background()redisContainer,err:setupRedis(ctx)iferr!nil{t。Fatal(err)}t。Cleanup(func(){iferr:redisContainer。Terminate(ctx);err!nil{t。Fatalf(failedtoterminatecontainer:s,err)}})YouwilllikelywanttowrapyourRedispackageofchoiceinaninterfacetoaidinunittestingandlimitlockinthroughtoutyourcodebasebutthatsoutofscopeforthisexampleoptions,err:redis。ParseURL(redisContainer。URI)iferr!nil{t。Fatal(err)}client:redis。NewClient(options)deferflushRedis(ctx,client)t。Log(pingingredis)pong,err:client。Ping(ctx)。Result()require。NoError(t,err)t。Log(receivedresponsefromredis)ifpong!PONG{t。Fatalf(receivedunexpectedresponsefromredis:s,pong)}Setdatakey:fmt。Sprintf({user。s}。favoritefood,uuid。NewString())value:CabbageBiscuitsttl,:time。ParseDuration(2h)errclient。Set(ctx,key,value,ttl)。Err()iferr!nil{t。Fatal(err)}GetdatasavedValue,err:client。Get(ctx,key)。Result()iferr!nil{t。Fatal(err)}ifsavedValue!value{t。Fatalf(Expectedvalues。Gots。,savedValue,value)}fmt。Println(key,savedValue)}funcflushRedis(ctxcontext。Context,clientredis。Client)error{returnclient。FlushAll(ctx)。Err()}
  两个包中的例子都列举了常用的中间件的用法,可以参考下https:golang。testcontainers。orgexamplesredishttps:github。comorydockertesttreev3examples

视频跟着老外看安徽山云松石迎客来视频加载中中国日报网7月2日电(徐子茗曹原青)有朋自远方来,不亦乐乎。这是中国汉代的古老诗篇,也是中华民族热情好客的生动写照。奇松怪石峻山云海7月1日,黄山之上迎来了一批特殊的客人新任北京市委常委孙军民赵磊职务分工明确不久前在北京市委领导班子换届中刚刚当选为市委常委的孙军民赵磊,两人职务分工现已明确。首都之窗网站市领导一栏更新显示,新任北京市委常委孙军民已任市委政法委书记,赵磊已任市委秘书长。官老房子加装电梯不用再争,双赢方案被提出,1楼6楼都同意了文桐影老房子到底要不要装电梯?这个问题应该是很多老小区居民最关心的。自2019年住建部开始实施旧房改造工程以来,为了提高人们的生活质量,电梯的安装就被提上日程。说到房子,老一辈人总上海假大哥事件扮有钱人在上流社会蹭吃蹭喝2年,无人发觉01hr前段时间,社交平台上流传着这样一条消息公布一个骗子,92年的,永远穿一身Nike。从公务机骗到劳斯莱斯,再骗奢侈品,上海车行,杭州酒店,一个个骗过去。骗卡地亚3。9亿说要买刘嘉玲为梁朝伟庆祝60大寿,曾袒露心声我忍了他30多年仅凭一双深邃忧郁的眼睛,就能令人瞬间入戏的电眼男神L朝伟,不知不觉中迎来了60岁的生日。太太L嘉玲,在微博上也及时为他送上了生日祝福。很多人都注意到了内容细节官方客气,不够亲切。近重磅!NBA1换10大交易,三届DPOY联手唐斯,爵士确定建队核心NBA自由市场已经开启,在昨日自由市场首日的签约中,有42名球员拿到合同,签约总金额高达19。4亿,其中不乏约基奇5年2。7亿布拉德利比尔5年2。51亿布克4年2。24亿唐斯4年2省委书记批面子工程某县马路修了12车道,车却没几辆据人民日报客户端安徽频道报道,7月2日上午,安徽召开16个省辖市二季度工作评议会。省委书记郑栅洁批个别干部虚躲冷粗假,并指出,作风问题背后是政绩观问题。郑栅洁还举例说,某县经济体量上海没有迎来报复性消费,却迎来了报复性涨房租上海恢复到正常秩序已经有一个月之久,我们很少能从媒体的镜头中看到报复性消费的场景。阻碍人们报复性消费的原因有很多,比如疫情养成的危机意识疫情造成的收入下降物价上涨等。特别是物价上涨大江时评思想有深度,好评才有厚度近期,2022好评中国网络评论大赛正在如火如荼地开展中,面向全国征集作品。本次评论大赛集全网之关注,引各界之反响,汇众家之力作。立意高远,自有澎湃之势观点笃定,自有文风论骨论述走心20220702星期六上午电视剧沉睡花园。1213。爱是真心换真心。邵老板好有意思啊!林深太套路了,哈哈哈,把媳妇亲跑了吧,家里冷清了吧,想媳妇了吧。在一起啦!!!下午电视剧沉睡花园。1316end。龚7月1日晚间市场利好消息一览板块1。国家发展改革委办公厅发布关于做好盘活存量资产扩大有效投资有关工作的通知。通知提出,各地发展改革部门要协调指导有关方面,根据项目实际情况,灵活采取不同方式进行盘活。对具备相关
steam登录时出现错误怎么办,爆哥教你一键解决作为当下国内最大的游戏平台,steam一直是很多玩家玩游戏的必选。不过近期steam做了更新,部分玩家反馈进不去steam,遇到网络错误的问题,为此笔者专门给各位说一个简单不要钱的年轻的阿森纳不再争四,战胜强敌,宣布他们是英超未来的球队阿尔特塔执教的这支阿森纳给人想象。当你们现在来到酋长球场,你们将一起体验一些东西。曾经分裂的球队现在提供了一种共同的体验,将参与者提升到他们在不久的过去可能认为无法想象的水平。最新曾过时80年代复古老物件,如今备受年轻人的喜爱,成一代人的回忆现如今,复古风大受欢迎。复古风是在新东西里融入了旧时代的美学元素。这种潮流最有趣之处在于,虽然是旧的东西,但是总能给人新的感觉。但复古与老物件还是不同的,老物件虽然会过时,但它们仍俞敏洪写给年轻人的5点建议一要为做人的使命感而活我最近看了一部纪录片。这部纪录片是著名的摄影家焦波带领了五六个平均年龄只有21岁的弟子,在山东的一个村庄里住了将近一年,对村庄里的老百姓跟踪拍摄,并从几千个小河南三农谱新篇河南日报记者刘晓波10月10日,省委宣传部举行河南这十年主题系列发布会乡村振兴专场。省农业农村厅省乡村振兴局省农科院有关负责同志,围绕深入实施乡村振兴战略,加快实现农业农村现代化,科创板做市制度稳步推进首批8家券商紧锣密鼓筹备证券时报记者程丹科创板做市制度正稳步推进。证券时报记者了解到,首批8家获科创板做市商资格的券商正在修改公司章程,办理监管报备工商变更登记及申请换发经营证券期货业务许可证等相关事宜,湖南卫视主持团大洗牌,接班人浮出水面,五小花谁能突围?继快乐大本营停播一周年之后,湖南卫视的另一档老牌综艺天天向上也正式宣布改版,具体原因官方并未告知,改版的最终结果也难以预料。前有天天兄弟不攻自破,后有快乐家族解散,很多人不禁疑问,三战狂丢38球!国少对手教练都哭了年轻人需要梦想10月9日,U17亚洲杯预选赛结束后,杨晨执教的中国U17出线成功,G组3轮2胜1负获得21球6分,年轻球员王钰栋等人颇有亮点。原本是针对中国的U17才关注,但同组的北马里亚纳群岛叶黄素补充剂是智商税吗?除了叶黄素食物里的这些营养素也很护眼哦虾青素功效是一种类胡萝卜素的含氧衍生物。它是具强抗氧化能力的类胡萝卜素,所以能预防和缓解明显存在氧化损伤机制的白内障和年龄相关性黄斑变性。它还32张珍贵的高清历史人物老照片,看看你都认识哪一位?民国影星歌唱家周璇蒋介石宋美龄夫妇日本女间谍川岛芳子(左),并没有传说中的美貌。国民政府主席林森毛主席在列车上抽烟周总理在打乒乓球民国总统黎元洪皖系军阀段祺瑞张学良和墨索里尼的女儿挑战者杯FMVP皮肤确定?子阳发布照片,三个篮球绕身很明显是东皇相信很多玩家都有这样的体会,玩王者的时候宁愿随便选个英雄也不想玩辅助。辅助不仅吃着最低的经济,还要挨着最毒的打,更多时候队友也不理解,导致辅助位置是最不受欢迎的。可是谁能够想到,今
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网