求问,后端是怎么接口自测的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
lifesimple
V2EX    程序员

求问,后端是怎么接口自测的?

  •  1
     
  •   lifesimple 2019-12-04 11:22:35 +08:00 18251 次点击
    这是一个创建于 2139 天前的主题,其中的信息可能已经有所发展或是发生改变。

    和我配合的后端写完从来不自测(大概 10 个接口 6 7 个不能一次通的),然后都是前端调试的时候,有问题然后和他说下。 每次都要前端页面上点击发个请求然后后端断点调试,一次两次倒还好,每次都是这种操作 而且还要点好几次,不知道是不会用 postman 还是懒 真的感觉很蠢这种方式联调。

    128 条回复    2019-12-19 09:25:56 +08:00
    1  2  
    HongJay
        1
    HongJay  
       2019-12-04 11:23:46 +08:00
    可能不好构建参数吧
    shehuizhuyi
        2
    shehuizhuyi  
       2019-12-04 11:24:27 +08:00   1
    postman
    lifesimple
        3
    lifesimple  
    OP
       2019-12-04 11:25:36 +08:00   16
    1O
        4
    1O  
       2019-12-04 11:25:38 +08:00
    b821025551b
        5
    b821025551b  
       2019-12-04 11:26:36 +08:00
    就是懒呗
    lifesimple
        6
    lifesimple  
    OP
       2019-12-04 11:26:39 +08:00
    @HongJay #1 不是,参数复杂的我可以把参数给他
    shuang
        7
    shuang  
       2019-12-04 11:27:09 +08:00
    开会时提出来
    cxe2v
        8
    cxe2v  
       2019-12-04 11:27:42 +08:00
    单元测试啊,自己构建参数啊,就算不好构建参数,你前端做好后,提交给他,他自己点击自己测啊,为什么会需要前后端配后操作
    wangkun025
        9
    wangkun025  
       2019-12-04 11:29:13 +08:00
    跟 leader 提议详细记录开发的过程。
    如果调试时间太长,而且过程很繁琐,自然会有人发飙。

    我是按时间拿工资的,真好
    sliwey
        10
    sliwey  
       2019-12-04 11:30:59 +08:00
    有一说一 不是懒就是菜 多反馈反馈 碰到过挺多这样的后端的
    kangmang92
        11
    kangmang92  
       2019-12-04 11:37:47 +08:00
    @1O 咦 跟 man 啥区别
    ty89
        12
    ty89  
       2019-12-04 11:41:20 +08:00
    写接口的单元测试啊,这还要人肉发请求,重构岂不是要累死
    hyy1995
        13
    hyy1995  
       2019-12-04 11:45:09 +08:00
    比较菜的后端就这样的了。。。我也遇到过
    Caballarii
        14
    Caballarii  
       2019-12-04 11:48:01 +08:00
    9102 年了,这么基本的 swagger 了解一下
    dswyzx
        15
    dswyzx  
       2019-12-04 11:51:57 +08:00
    @kangmang92 完全开源.号称功能强一点
    loongwang
        16
    loongwang  
       2019-12-04 11:52:38 +08:00
    我很多都不测.. 主要是这个接口需要很多前置条件,自己构建很麻烦, 等着前端调就不用管那些前置条件了.
    chickenJuicer
        17
    chickenJuicer  
       2019-12-04 11:54:51 +08:00
    必须自测好才给前端, 我认为这是一个合格的后端的基本素质...
    randyo
        18
    randyo  
       2019-12-04 11:57:16 +08:00 via Android
    反正我叫后端给我参数格式,我调接口就按照这个格式传,报错?关我啥事,自己看去。
    arthas2234
        19
    arthas2234  
       2019-12-04 11:59:07 +08:00
    后端怎么可能不知道要怎么测试,就是懒
    p8YFk4f3E8SJ3aEv
        20
    p8YFk4f3E8SJ3aEv  
       2019-12-04 11:59:26 +08:00
    遇到过好几次,我直接跟后端说能不能自测过了再给我,你得说,不然就变成你帮他们测试了
    test3207
        21
    test3207  
       2019-12-04 12:02:26 +08:00
    写单测啊,然后没有单测条件 Postman 也行。天天人肉联调你看我不打爆这 sd 的狗头。
    解决问题的话,自己写假数据保证任务完成,延期不背锅;先找当事人反映,最多你前端本地跑让他自己调。不改的话再往部门领导反映。不管的话就准备找下家呗。
    opengps
        22
    opengps  
       2019-12-04 12:15:05 +08:00 via Android
    一次性能通过 3-4 成似乎挺厉害,不过自己不会测试就很菜了
    luozic
        23
    luozic  
       2019-12-04 12:19:50 +08:00 via iPhone
    spring contracts ; swagger ; postman ;实际就是懒和甩锅。
    slyang5
        24
    slyang5  
       2019-12-04 12:44:58 +08:00
    @lifesimple 这后端合作真难啊
    kylinC
        25
    kylinC  
       2019-12-04 12:49:09 +08:00
    postman 单元测试
    Hurriance
        26
    Hurriance  
       2019-12-04 12:55:40 +08:00 via iPhone
    约定好返回数据格式,后端自己的接口肯定要自测的啊
    wangkun025
        27
    wangkun025  
       2019-12-04 13:02:11 +08:00
    @f056917 把后端打死算了
    inrenping
        28
    inrenping  
       2019-12-04 13:22:24 +08:00
    SjwNo1
        29
    SjwNo1  
       2019-12-04 13:22:51 +08:00   3
    个别前端连传参都传不对的,后端有抱怨? 有情绪和他沟通不就好了 。。。
    1O
        30
    1O  
       2019-12-04 13:23:57 +08:00
    @kangmang92 API request builder - A free, fast, and beautiful alternative to Postman
    limingjie138
        31
    limingjie138  
       2019-12-04 13:28:26 +08:00
    上家是 postman,刚入职这家项目是 swagger 搞定,现在特么的连 service 都不用写,可重用性拉满= = 想写错都难。不测接口的后端不只懒,他肯定没干过全菜(误);
    scukmh
        32
    scukmh  
       2019-12-04 13:30:26 +08:00
    个别前端连传参都传不对的,后端有抱怨? 有情绪和他沟通不就好了 。。。
    xingheng
        33
    xingheng  
       2019-12-04 13:34:49 +08:00 via iPhone
    不用 Postman 调试,怕不是连 ut 也没有
    robot1
        34
    robot1  
       2019-12-04 13:42:03 +08:00
    质量这么低可以向上级投诉啊,开会的时候反应啊 还有打断点这种调试方式完全不适合后端,应该具备完整的日志。
    darknoll
        35
    darknoll  
       2019-12-04 13:47:04 +08:00
    可能是 cookie 啥的,嫌麻烦
    ylsc633
        36
    ylsc633  
       2019-12-04 13:47:25+08:00
    数据不对 所以就需要联调

    请求不通 后端可能测了,也可能没测

    比如 他自己用 postman 请求是 ok 了. .可是忘记前端需要跨域,所以都不通了..

    比如 他以为 这个参数是从 url 里取的, 结果前端是从 header 里传的. 导致不一致..
    fatpower
        37
    fatpower  
       2019-12-04 13:51:42 +08:00
    和他领导反馈
    uxstone
        38
    uxstone  
       2019-12-04 13:56:20 +08:00
    蠢 懒 坏
    DT37
        39
    DT37  
       2019-12-04 14:02:14 +08:00
    果然我菜,我一般 postman 测试过的,前端测试不过,哎,参数太复杂就让前端人肉了
    passerbytiny
        40
    passerbytiny  
       2019-12-04 14:08:33 +08:00
    既不是不会用,也不是懒,而是:若你们的开发流程中没有单元测试环节,那么有过经验的人,是不会自找麻烦的去主动做的。

    PS:通常,单元测试的时间至少是编码时间的一倍。
    OSF2E
        41
    OSF2E  
       2019-12-04 14:09:50 +08:00
    先不考虑网络异常、业务异常等问题,先在客户端(前端)把完整的数据交互流程完整开发出来,涉及数据请求的地方,先用假数据或者利用客户端本地数据库模拟一套数据管理系统以及相关接口,也就是模拟实现一套数据持久层与请求层。如果是网页应用,可以用 indexdDB,其它平台则推荐 sqlite。

    前一步完成之后,再在基础的数据交互场景之上穷举所有可能要处理的非核心业务的数据交互场景,并整理接口文档。

    后端根据文档开发接口,严格按前端的要求来。

    总之就是一句话,房子要从下往上建,而不能从楼顶开始。
    DT37
        42
    DT37  
       2019-12-04 14:09:57 +08:00
    每次前端跟我调试都很有情绪,整的我也很有情绪,可烦跟我们前端调试的,现在能我处理的数据我都自己搞定.
    带有情绪的调试很影响合作的.一定是我太菜.你们说的都对,我占了三条,蠢懒菜.不接受任何反驳.做的多错的多,做的多错的多
    DT37
        43
    DT37  
       2019-12-04 14:13:12 +08:00
    @OSF2E 说的很有道理 自下而上,我想着自下而上,但是前端不听,跟着他的自上而下,又不行.要么后端配合前端,要么前端配合后端,总要为主的人,但是偏偏我们前端是以她为主业务不对,以我为主她每次讨论带有情绪,我很烦很烦
    imycc
        44
    imycc  
       2019-12-04 14:16:17 +08:00
    接口自测不通过是不能够交付的。这种事情遇到多了就跟对方老大反馈
    redford42
        45
    redford42  
       2019-12-04 14:18:44 +08:00
    教教他 postman
    toma77
        46
    toma77  
       2019-12-04 14:20:45 +08:00
    大部分后端写好直接给前端,出现问题他们再去看
    DT37
        47
    DT37  
       2019-12-04 14:22:18 +08:00
    一般牛逼的前端,都可以找到后台哪里出问题的,而不是觉得后台接口调试总是报错,一般牛逼的前端都可以很好的处理菜鸡后端传来的数据,一般牛逼的前端.......这才是问题点,除非两个人都菜
    fengpan567
        48
    fengpan567  
       2019-12-04 14:24:05 +08:00
    postman
    p8YFk4f3E8SJ3aEv
        49
    p8YFk4f3E8SJ3aEv  
       2019-12-04 14:29:37 +08:00
    @wangkun025 自己写的东西不能用也不自测就给别人还不能说了?这么傲娇做什么后端啊,去做公主啊
    cmonkey
        50
    cmonkey  
       2019-12-04 14:30:33 +08:00
    单元测试
    OSF2E
        51
    OSF2E  
       2019-12-04 14:30:49 +08:00
    @DT37 所以公司的技术(面试)负责人对前端工作的认知很重要……前端开发者应当既懂 UI 设计,也要懂软件开发,方才能把开发流程串起来。
    mnssbe
        52
    mnssbe  
       2019-12-04 14:31:02 +08:00
    后端太水
    p8YFk4f3E8SJ3aEv
        53
    p8YFk4f3E8SJ3aEv  
       2019-12-04 14:31:32 +08:00   1
    @DT37 你这给我看傻了
    DT37
        54
    DT37  
       2019-12-04 14:47:04 +08:00
    @f056917
    我的观点如下,在调试这种合作过程中双方需要保持理智客观(合作时的信任),先不论后端是否是菜懒坏.我觉得都有必要把前端出现的问题反馈给后台,包括问清什么不用测试工具测试(导致每次需要前端调用看日志找问题),减少没有沟通产生的误会,才是解决问题的良方.
    而不是想着后台的懒菜水.如果你反馈回去后台置之不理,耽误前端工作需要反馈给上级或者开会时说明,此时没必要信任后台(直接开怼).
    ps:我是已经不太愿意跟我们前端调试接口,因为只要产生分歧问题,前端都会带有很强的情绪在里面.发生过很多次我也强调过,但是还是不改,我就开启了开怼模式. 请赐我一个牛逼的前端被怼我也毫无怨言只要他很牛逼.
    来自一枚菜鸟后台的回复看到这个问题感触很多情绪很复杂
    wangkun025
        55
    wangkun025  
       2019-12-04 14:48:13 +08:00
    @f056917 大哥,被误会,我是友军
    wangyzj
        56
    wangyzj  
       2019-12-04 14:51:37 +08:00
    YApi 接入 ci
    p8YFk4f3E8SJ3aEv
        57
    p8YFk4f3E8SJ3aEv  
       2019-12-04 14:58:32 +08:00
    @wangkun025 [捂脸]
    deletemyself
        58
    deletemyself  
       2019-12-04 15:00:33 +08:00
    测通是基本,但是有的就只示意接口名、参数等,返回字段也没有文档就坑了。。。用的时候就靠猜和问。。问还不一定及时回复。。。
    p8YFk4f3E8SJ3aEv
        59
    p8YFk4f3E8SJ3aEv  
       2019-12-04 15:01:32 +08:00
    @DT37 主要还是沟通问题,如果后端给的接口没有自测到前端这儿直接 504,还是连着三四个接口都这样,哪个前端都有情绪。反过来后端给的数据前端就想拿来直接用不想二次处理,那肯定前端也有问题
    lifesimple
        60
    lifesimple  
    OP
       2019-12-04 15:06:48 +08:00
    @DT37 #54 没有开怼,只是吐槽,槽点在
    1. 写完接口 自己不 mock 或者数据库捞一些数据 来自测
    2. 接口不通,传参没问题,我把参数给后端。后端联调总是需要前端手动点击页面触发请求,这个事情完全可以通过 postman 或者其他方式来操作,这种情况如果我不在的情况,就变成我前端阻塞他后端调试后端接口,很滑稽。
    p8YFk4f3E8SJ3aEv
        61
    p8YFk4f3E8SJ3aEv  
       2019-12-04 15:09:06 +08:00
    @lifesimple 表示小公司经常这样干
    lifesimple
        62
    lifesimple  
    OP
       2019-12-04 15:09:32 +08:00
    @DT37 #54 昨天晚上我早走了,走之前和他说过接口报错(请求参数没问题),然后他昨晚这接口就没调。
    DT37
        63
    DT37  
       2019-12-04 15:10:09 +08:00
    @f056917 是的沟通问题.但是这个世界上林子大什么鸟都有,不是每个人都能很好的意识到需要良好的沟通.
    后面二次处理数据这个也要看后台跟前端关系好不好了,好的话后台处理不方便,前端可以处理掉,前端不方便的后台帮忙处理掉,互惠互利双赢对吧,如果关系不好话就头疼了,突然心疼自己
    DT37
        64
    DT37  
       2019-12-04 15:11:25 +08:00
    @lifesimple 那就是后台的问题了说了还不改就很烦人,这不耽误工作嘛
    luckyrayyy
        65
    luckyrayyy  
       2019-12-04 15:13:37 +08:00
    @1O 这个笑死我了...
    xuanbg
        66
    xuanbg  
       2019-12-04 15:15:04 +08:00
    Paw 实在是太好用了,比 Postman 好用太多了。唯一的缺点是要花钱买
    Hanggi
        67
    Hanggi  
       2019-12-04 15:26:42 +08:00
    不写测试吗?
    Varobjs
        68
    Varobjs  
       2019-12-04 15:46:00 +08:00
    不写单测的太多了,包括我自己(我也想写,但是太耗时了)
    另外,不写单测,不一定代表接口就不好,开发的时候总要想到尽可能多地情况吧,总得自己模拟看有没有问题吧?

    上面有人说了,单测只是重构的时候,特别方便且安全写!
    yEhwG10ZJa83067x
        69
    yEhwG10ZJa83067x  
       2019-12-04 15:46:50 +08:00
    就我使用 postwoman 的吗
    https://postwoman.io/
    DT37
        70
    DT37  
       2019-12-04 15:53:15 +08:00
    @Varobjs 我喜欢你的头像 啊哈哈 ice bear
    securityCoding
        71
    securityCoding  
       2019-12-04 15:56:10 +08:00
    swagger 导入到 yaip 里面去 , 测试用例可以保存起来,多棒啊
    laimeifeng1995
        72
    laimeifeng1995  
       2019-12-04 15:56:15 +08:00
    提测接口呀,难道你们公司没有接口测试的嘛。。。
    pangleon
        73
    pangleon  
       2019-12-04 15:56:20 +08:00
    就是懒加菜,没别的解释,没的洗
    jintianfengda
        74
    jintianfengda  
       2019-12-04 15:57:51 +08:00
    讲道理我不测个完整通透我都不好意思给前端联调,生怕他找到 bug
    gaius
        75
    gaius  
       2019-12-04 15:59:57 +08:00
    idea 自带.http 插件的比 postman 好用点,可以传 git
    Erroad
        76
    Erroad  
       2019-12-04 16:01:22 +08:00
    你这个后端就是懒,除非请求特别复杂,不然一定首先自测全流程。接口层面来说,太复杂的让前端构造一次,自己拷贝个 curl,import 到 postman 自己慢慢调。

    复杂的函数自己写完直接上单元测试
    zjsxwc
        77
    zjsxwc  
       2019-12-04 16:08:48 +08:00
    https://github.com/matryer/silk

    把 Markdown 文档当做测试脚本运行,文档即代码
    rumingruyue
        78
    rumingruyue  
       2019-12-04 16:15:17 +08:00
    后端自测是最起码的专业素养,自己开发完,最正常的案例都要进行测试。
    如果是 HTTP 请求可以用 PostMan 也可用 CURL
    如果是 Dubbo 接口,直接 telnet 或者用公司的其他工具。
    正常情况下除了正常数据还要测试异常数据。

    解决问题一般都是要看错误日志的,很难排查的情况下才 Debug。
    主要还是个人追求和习惯问题。
    这个你可以跟他反映下,如果以后总这样,不听跟他领导说,让他以后先自测好再联调。
    wysnylc
        79
    wysnylc  
       2019-12-04 16:23:07 +08:00
    接口不通就认为接口无效打回重写
    akakidz
        80
    akakidz  
       2019-12-04 16:28:41 +08:00
    wawehi
        81
    wawehi  
       2019-12-04 16:31:49 +08:00
    要分情况看吧,一般的 HTTP 接口可以自测,但如果是有状态的 SOCKET 服务,就不一定了,可能前置条件太复杂,比如多人在线游戏要测试,需要先构建登录认证、进入频道或房间、再释放技能或执行某操作,此时可能还需要其它虚拟玩家配合,这样搞下来,测一个接口的时间成本很高
    以前为了测接口和流程, 用 FLASH 写一个简版 APP,这样可以多开 N 个,再来模拟和测试各种情况,完事再把接口交给客户端
    还有一种做法是直接用 py 写个命令行的应用程序来模拟各种操作,但是逻辑复杂的时候确实很麻烦
    不管哪种方式,要完整测试都有相当的工作量。
    工期紧张时一般保证核心算法和存储这些的单元测试,其它的就在连调中解决了。
    wsseo
        82
    wsseo  
       2019-12-04 16:33:53 +08:00
    我觉得最难的是前后端都不校验参数值。

    借楼问一下有没有比较现代的 api 文档工具?
    zhifSu
        83
    zhifSu  
       2019-12-04 16:38:05 +08:00
    我们的前端只负责静态页面~
    xman99
        84
    xman99  
       2019-12-04 16:40:17 +08:00
    一般我会使用 postman 自己调试下, 然后添加到接口文档, 把必要的参数说明了。qq 跟对接同事说下
    lifesimple
        85
    lifesimple  
    OP
       2019-12-04 16:42:05 +08:00
    @xman99 #84 对啊 这样就很舒服
    sytnishizuiai
        86
    sytnishizuiai  
       2019-12-04 16:50:16 +08:00
    写接口文档-》写代码-》测试-》完善文档,补充返回值
    LtOl66
        87
    LtOl66  
       2019-12-04 16:50:20 +08:00
    一般是将各种出现的情况,罗列出来然后一种情况一种情况的测试,自测完然后就提测。
    Leigg
        88
    Leigg  
       2019-12-04 17:15:59 +08:00 via Android
    多数是后端自己要保证接口质量,但是有些接口后端没办法自测需要前端配合调试,比如 wx.login
    Cihua
        89
    Cihua  
       2019-12-04 17:20:47 +08:00
    多数还是可以自测的..
    但是目前比如我这边,一个请求进来先经过网关层认证一部分参数,然后经过权限认证服务,经过 A 业务服务,然后调用 B 业务服务....类似于这种的依赖多个服务的接口..或者没有开发服务环境的时候.可能需要前端配合人肉测试接口...但是一般会和前端沟通下配合测一下....
    Egfly
        90
    Egfly  
       2019-12-04 17:28:54 +08:00
    就是懒、蠢!!!

    1、前端对接时根据接口文档来,保证前端提交参数与接口文档一致就行。开发完之后发布一个 release 版本,然后交由测试进行测试。

    2、测试发现 bug 之后,先确认是后端 bug 还是前端 bug。

    3、如果是后端 bug,让后端自己打开网页复现(复现流程,测试描述清楚),然后修复,最后测试验收。

    > 其实正常后端开发完接口,写好文档之后,测试要先进行接口测试的

    所以后端的问题为什么要占用前端的时间?
    srx1982
        91
    srx1982  
       2019-12-04 17:30:44 +08:00
    上 swagger,省的调了
    KentY
        92
    KentY  
       2019-12-04 17:34:20 +08:00
    swagger 的页面有 bug, 单击了 try it 以后, cpu 会飙升, 然后取消, 又恢复.
    说到工具, 我没找到比 insomnia 更好的.
    wiken
        93
    wiken  
       2019-12-04 17:37:58 +08:00
    后端一般都是用 postman 之类的来调试接口.前后端面向文档编程就好了,这种联调不能接受,接口返回跟文档不符合,直接报 bug
    Caijl
        94
    Caijl  
       2019-12-04 17:38:59 +08:00
    跟技术没关,关乎做人。
    SmiteChow
        95
    SmiteChow  
       2019-12-04 17:48:25 +08:00
    接口视图层只能做序列号、反序列化,业务代码必须封装为 service,而 service 必须用 ut 覆盖。从楼主描述来看,同事必然是将 service 写到了 view 中,导致只能通过调 api 进行测试。
    ForPy
        96
    ForPy  
       2019-12-04 18:04:08 +08:00
    是我 Python requests 装逼的时刻到了
    zuokanyunqishi
        97
    zuokanyunqishi  
       2019-12-04 18:08:02 +08:00 via Android
    单元测试
    ihavecat
        98
    ihavecat  
       2019-12-04 18:20:18 +08:00
    postwoman
    jzbax1230
        99
    jzbax1230  
       2019-12-04 18:20:19 +08:00
    yapi swagger postman
    balabalaguguji
        100
    balabalaguguji  
       2019-12-04 18:30:48 +08:00
    写接口文档,然后自己接口测试: https://easydoc.top
    1  2  
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2696 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 07:23 PVG 15:23 LAX 00:23 JFK 03:23
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86