$30 off During Our Annual Pro Sale. View Details »

Golang API Testing the HARD way

Golang API Testing the HARD way

Presentations at GoConference 2018 Autumn.

Seiji Takahashi

November 25, 2018
Tweet

More Decks by Seiji Takahashi

Other Decks in Programming

Transcript

  1. API
    TESTING
    THE HARD WAY
    @__timakin__
    Go CONFERENCE 2018 Autumn

    View Slide

  2. SEIJI TAKAHASHI
    timakin
    @__timakin__
    __timakin__
    ॴଐɿ(VOPTZ*ODϝσ
    ΟΞࣄۀຊ෦
    ݴޠɿ(P 4XJGU +BWB4DSJQU

    View Slide

  3. ΞδΣϯμ
    w (Pͷ"1*ͷςετʹ͓͚ΔςελϏϦςΟ
    w ςετʹؔ͢Δ5JQT
    w Ϣχοτςετʹ͍ͭͯ
    w ΠϯςάϨʔγϣϯςετʹ͍ͭͯ
    w ϥΠϒϥϦબఆɺͭ·͍ͮͨՕॴ

    View Slide

  4. View Slide

  5. (Pͷςετϊ΢ϋ΢
    w Ϣχοτςετͷޮ཰Խ
    w (Pͷ༏Εͨඪ४ػೳ

    View Slide

  6. (Pͷςετϊ΢ϋ΢
    w Ϣχοτςετͷޮ཰Խ
    w (Pͷ༏Εͨඪ४ػೳ
    w .PDL
    w JOUFSGBDFʹΑΔந৅Խ

    View Slide

  7. (Pͷςετϊ΢ϋ΢
    w Ϣχοτςετͷޮ཰Խ
    w (Pͷ༏Εͨඪ४ػೳ
    w .PDL
    w JOUFSGBDFʹΑΔந৅Խ
    w 5FTUJOHGSBNFXPSLT

    View Slide

  8. (Pͷςετϊ΢ϋ΢
    w Ϣχοτςετͷޮ཰Խ
    w (Pͷ༏Εͨඪ४ػೳ
    w .PDL
    w JOUFSGBDFʹΑΔந৅Խ
    w 5FTUJOHGSBNFXPSLT
    w OFUIUUQIUUQUFTUͷ࢖͍ํ

    View Slide

  9. ςετͷ࣮ྫ
    ʢಛʹΠϯςάϨʔγϣϯςετʣ
    ͷྫ͕Կނ͔ෆ଍͍ͯ͠Δʜ

    View Slide

  10. (PͰςετ͢Δ৔߹ͷجຊ
    w JOUFSGBDFͷ׆༻
    w AQBDLBHFYYY@UFTUAͱ͍͏໋໊
    w 5BCMF%SJWFO5FTU
    w 5FTU$BDIF $PWFSBHF #FODINBSL

    View Slide

  11. *OUFSGBDFΛ׆༻ͯ͠ΔͱԿ͕͍͍ͷ͔ʁ
    w ผͷϨΠϠʔͷ࣮૷Λ஌ΒͣʹίʔυΛॻ͖ਐΊΒ
    ΕΔ
    w ࣮૷ͷ੾Γସ͕͑༰қʹߦ͑Δ
    w NPDLੜ੒ʹ࢖͑Δ
    w αϯϓϧϨεϙϯεͷ࡞੒౳͕೉͍͠

    ֎෦"1*ݺͼग़͠ͳͲͰ໾ʹཱͭ

    View Slide

  12. AQBDLBHFYYY@UFTUA
    w 5FTU1BDLBHFΛ࣮૷ͱ෼཭͢Δ
    w ࣮ࡍͷݺͼग़͠ํͱܗࣜΛ߹ΘͤΔ
    w QSJWBUFͳม਺ʹର͢Δࢀর͕Ͱ͖ͳ͍Α͏ʹ͢Δ

    View Slide

  13. 5BCMF%SJWFO5FTU

    View Slide

  14. 5BCMF%SJWFO5FTU
    w ςετର৅ͱͳΔσʔλ഑ྻɺ

    ظ଴͞ΕΔ݁Ռͷ഑ྻΛΠςϨʔτ͢Δ͜ͱͰ

    ෳ਺ͷςετέʔεΛ؆ܿʹ·ͱΊΒΕΔɻ
    w ϕϯνϚʔΫΛ෼͚ͨΓɺU1BSBMMFMΛ࢖͍͍ͨ৔߹
    ͸4VCUFTUT΋ݕ౼͢Δɻ

    View Slide

  15. 5FTU$BDIF $PWFSBHF #FODINBSL
    w 5FTU$BDIF

    ςετؔ਺͝ͱʹ*%͕ৼΒΕͯɺ

    ݁Ռ͕ϑΝΠϧʹు͖ग़͞Εͯอଘ͞ΕΔɻ

    Ұக͢Δ݁Ռ͕͋Ε͹࢖͍ճ͢ɻ
    w $PWFSBHF #FODINBSL

    ඪ४Ͱαϙʔτ͞ΕΔ

    ΧόϨοδϨϙʔτͷग़ྗɺϕϯνϚʔΫ

    View Slide

  16. $BDIFʹ͍ͭͯ͸ʜ
    IUUQTTQFBLFSEFDLDPNUJNBLJOIPXHPDBDIFUFTUT

    View Slide

  17. (PͰςελϏϦςΟʔΛ্͛Δʹ͸
    w ͦ΋ͦ΋ςετ͕͠ʹ͍͘ίʔυ͸μ
    ϝ
    w JOUFSGBDFͰϞοΫՄೳͳ෦ҐΛ૿΍͢
    w ςετϔϧύʔͷॆ࣮
    w ϢχοτςετʹدͤΒΕΔͱ͜Ζ͸

    పఈͯ͠دͤΔׂͱେࣄ

    View Slide

  18. (PͰςελϏϦςΟʔΛ্͛Δʹ͸
    w ϢχοτςετͷͨΊͷඪ४ػೳ͕

    ௒ॆ࣮͍ͯ͠ΔͷͰɺͦΕΛ׆༻͢ΔͨΊʹ΋ɺ

    Ͱ͖ΔݶΓߏ଄ମͷςετύοέʔδʹ

    ϩδοΫΛूதͤ͞Δɻ
    w 4FSWJDF૚ʹϑΟϧλϦϯάͷϩδοΫΛ࢒ͨ͠Γ
    ͠ͳ͍ɻ

    View Slide

  19. ͜͜·Ͱ͕લఏ

    View Slide

  20. Ϣχοτςετͷ࿩

    View Slide

  21. Ϣχοτςετͷ5JQT
    w 5FTU)FMQFS
    w 4UVCTUBOEBSEQBDLBHFT
    w 'JYUVSFT
    w 5FTUJOHGSBNFXPSLT

    View Slide

  22. 5FTU)FMQFS
    U)FMQFS
    ΛݺͿ͜ͱͰɺ

    )FMQFSͷؔ਺ΛςετΛ

    ϚʔΫͯ͠ɺGBJMͨ࣌͠ʹ

    ݺͼग़͠ՕॴΛQSJOUͯ͘͠ΕΔɻ
    ͜ΕΛݺ͹ͳ͍ͱ಺෦ͰGBJM͠
    ͨΓɺॲཧΛڞ௨Խͨ࣌͠ʹਏ
    ͍ࢥ͍Λ͢Δɻ

    View Slide

  23. 5FTU)FMQFS
    ඪ४ύοέʔδͷςετ͸ಛʹ)FMQFS͕׆༻͞Ε͍ͯΔ
    ʢSVO DPQZ'JMF OFX5FNQ%JSʣ

    View Slide

  24. 4UVCTUBOEBSEQBDLBHFT
    w UJNFύοέʔδɺSBOEύοέʔδͳͲͷ݁ՌΛ࢖͏
    ॲཧ͸TUVC͢Δඞཁ͕͋Δ

    View Slide

  25. ελϒํ๏
    w άϩʔόϧม਺ͷࠩ͠ସ͑
    w ελϒՄೳͳϥούʔ
    w αʔυύʔςΟύοέʔδͷར༻

    View Slide

  26. άϩʔόϧม਺ͷࠩ͠ସ͑
    άϩʔόϧͳม਺ͰมΘΓ͏Δ݁ՌΛऔಘ͢
    ΔΑ͏ʹ͠ɺςετ࣌͸ͦΕΛॻ͖׵͑Δɻ
    ಉ͡஋ͳΒͱ΋͔͘ɺQBSBMMFMͰ΍ͬͨ࣌ʹෆ
    ͕҆͋Δɻ
    HPSN͕΍ͬͯΔʜ
    IUUQTHJUIVCDPNKJO[IVHPSNCMPCNBTUFSVUJMTHP-

    View Slide

  27. ελϒՄೳͳϥούʔ
    ελϒ༻ͷ஋͕ηοτ͞Εͯ

    ͍ͨΒఆ਺తʹ஋Λฦؔ͢਺Λ

    ఆٛ͢Δɻ

    View Slide

  28. αʔυύʔςΟύοέʔδͷར༻
    w ࣌ࠁݻఆ
    w HJUIVCDPNCFOCKPIOTPODMPDL
    w HJUIVCDPNULVDIJLJGBLFUJNF
    w DPEFDMPVEGPVOESZPSHDMPDL

    View Slide

  29. 4UVCTUBOEBSEQBDLBHFT
    w ʮ༗ޮظݶΛա͗ͨΒΤϯςΟςΟΛແޮԽ͢Δʯ

    Έ͍ͨͳॲཧ͕͋Δ৔߹ɺ࣌ࠁΛ୯७ʹݻఆ͢Δͩ
    ͚Ͱ͸ͳ͘ਐΊΔඞཁ͕͋Δ
    w ͦ͏ͨ͠৔߹͸αʔυύʔςΟͷύοέʔδ΋ߟ
    ྀʹೖΕΔ͕ɺʢ͍ͩͿ࣮૷͕গͳ͍ͷͰʣ

    جຊతʹؔ਺Ͱϥοϓ͢Ε͹ࣄ଍ΓΔͱࢥΘΕΔɻ

    View Slide

  30. 'JYUVSFT
    w ςετσʔλͷఆٛํ๏
    w ߏ଄ମ
    w ഑ྻͷσʔλߏ଄ʢ5BCMF%SJWFO5FTUʣ
    w ͦͷଞ
    w +40/ :".-

    View Slide

  31. 'JYUVSFT
    w ߏ଄ମ
    w ϙΠϯλΛड͚औͬͯૢ࡞͢Δؔ਺Λςετ͢Δ
    ৔߹ɺςετ༻ͷม਺ͷݩσʔλ͕มΘΓଓ͚ͯɺ
    ҙਤ͠ͳ͍ڍಈ͕ى͜Δɻ
    w 5BCMF%SJWFO5FTUͷΑ͏ʹݸผͷέʔεͰࢀর͢
    Δσʔλ͕ҧ͏৔߹͸0,

    View Slide

  32. 'JYUVSFT
    w +40/ :".-
    w JPVUJM3FBE'JMFͯ͠ςετσʔλΛಡΈࠐΉ
    w ಡΈࠐΈ༻ͷσʔλ͸JOQVU ·ͨ͸TSD

    ൺֱ༻ͷσʔλ͸HPMEFO
    w "1*ͷϦΫΤετͱϨεϙϯεΛ

    શ෦+40/ఆ͓͍ٛͯͯ͠ςετ͢Δͷ΋͋Γ


    View Slide

  33. 'JYUVSFT
    w JOQVUHPMEFO
    w ඪ४ύοέʔδͰͷར༻Օॴ
    w ςετΧόϨοδϖʔδͷ಺༰ݕূ
    w (PEPDੜ੒಺༰ݕূ

    View Slide

  34. 'JYUVSFT
    w JOQVUHPMEFO
    w ඪ४ύοέʔδͰͷར༻Օॴ
    w ςετΧόϨοδϖʔδͷ಺༰ݕূ
    w (PEPDੜ੒಺༰ݕূ
    w ࣮ࡍͷར༻ྫ
    w "1*ͷϦΫΤετͱϨεϙϯεΛ

    શ෦+40/ఆ͓͍ٛͯͯ͠ςετ͢Δ
    w εςʔλείʔυ͚ͩνΣοΫ͢ΔΑ͏ͳ৔߹͸ɺ

    ϦΫΤετ͚ͩATSDAͱ͍͏Α͏ͳ໋໊Ͱఆٛ͢Δͷ΋͋Γ

    View Slide

  35. 5FTUJOHGSBNFXPSLT
    w ʮ(Pͬͯɺ\\೚ҙͷݴޠ໊^^Ͱ͍͏ͱ͜Ζ\\ͦͷݴޠͷ୅දత
    ͳςετϑϨʔϜϫʔΫ໊^^ͬͯͳΜ͔ͳ͍ΜͰ͔͢ʁʯ
    w "1*ϑϨʔϜϫʔΫͰ΋ಉٞ͡࿦͕͋Δͱࢥ͍·͕͢ʜ

    View Slide

  36. 5FTUJOHGSBNFXPSLT
    w ʮ(Pͬͯɺ\\೚ҙͷݴޠ໊^^Ͱ͍͏ͱ͜Ζ\\ͦͷݴޠͷ୅දత
    ͳςετϑϨʔϜϫʔΫ໊^^ͬͯͳΜ͔ͳ͍ΜͰ͔͢ʁʯ
    w "1*ϑϨʔϜϫʔΫͰ΋ಉٞ͡࿦͕͋Δͱࢥ͍·͕͢ʜ
    w ςετϑϨʔϜϫʔΫͷੋඇ
    w ଞͷਓ͕ແݶʹޠ͍ͬͯΔͷͰলུ
    w ʮͨͩͷ%4-ʯ
    w ʮίϯςΩετʹ͋ͬͨϝοηʔδදࣔʯ
    w ʮUFTUJOHͰඞཁे෼ʯ
    w ʮϝϯςอূʯ
    w ʮπʔϧؒͷ࿈ܞͷऔΓ΍͢͞ʯ

    View Slide

  37. 5FTUJOHGSBNFXPSLT
    w ͜Ε͘Β͍ͳΒೖΕͯ΋Α͘ͳ͍ʁͱ͍͏ύοέʔδ
    w HJUIVCDPNHPPHMFHPDNQ
    w HJUIVCDPNTUSFUDISUFTUJGZ
    w 5BCMF%SJWFO5FTUͰͪΌΜͱςετέʔε໊ॻ͍͓͚ͯ͹

    ࠔΔ͜ͱ΋গͳ͍ͷͰผʹ͍Βͳ͍͔΋

    View Slide

  38. 5FTUJOHGSBNFXPSLT
    w ͜Ε͘Β͍ͳΒೖΕͯ΋Α͘ͳ͍ʁͱ͍͏ύοέʔδ
    w HJUIVCDPNHPPHMFHPDNQ
    w HJUIVCDPNTUSFUDISUFTUJGZ
    w 5BCMF%SJWFO5FTUͰͪΌΜͱςετέʔε໊ॻ͍͓͚ͯ͹

    ࠔΔ͜ͱ΋গͳ͍ͷͰผʹ͍Βͳ͍͔΋
    w ݸਓతʹೖΕͳ͍ύοέʔδ
    w ඞཁे෼ͳ͸ͣͷUFTUJOHύοέʔδͷϥούʔ
    w HPUFTUUPPMT
    w (P$POWFZ
    w (PCMJO

    View Slide

  39. ΠϯςάϨʔγϣϯςετͷ࿩

    View Slide

  40. ΠϯςάϨʔγϣϯςετʹඞཁͳ͜ͱ
    w ࣮ߦ؀ڥ
    w %# DBDIF
    w 'JYUVSF
    w ࣌ࠁɾཚ਺ݻఆ
    w DPOUFYU಺ม਺
    w ֎෦"1*ͷ.PDL
    w "1*SFRSFTͷݕূ

    View Slide

  41. ࣮ߦ؀ڥͷߏங
    w %#ɺDBDIFΛͲͷΑ͏ʹཱͯΔ͔
    w .PDL͢Δ
    w σʔϞϯ࣮ߦ
    w EPDLFSίϯςφΛཱͯΔ

    View Slide

  42. %#पΓͰඞཁͳ࡞ۀ
    w ςετ࣮ߦ͝ͱʹҎԼͷϑϩʔΛ౿Ή
    ίωΫγϣϯཱ֬
    ςʔϒϧ࡞੒
    Ϛελσʔλద༻
    ςετ࣮ߦ
    ςʔϒϧഁغ
    ίωΫγϣϯ੾அ

    View Slide

  43. %#Λ.PDL͢Δͷ͸ྑ͍͔ʁ
    w ͋·ΓϕλʔͰ͸ͳ͍ͱࢥ͏
    w 42-จ͕ؒҧ͍ͬͯΔ͔Ͳ͏͔͸ίϯύΠϧ࣌ʹ
    ؾ͚ͮͳ͍
    w αʔυύʔςΟ"1*ͳΒ·ͩ͠΋ɺ%#ͳΒࣗ෼Ͱ
    ؀ڥ͕༻ҙͯ͠ɺҙਤ௨Γ͔Ͳ͏͔ͷݕূ͕
    Ͱ͖Δͷ͔ͩΒɺ.PDL͠ͳ͍ํ͕ྑ͍

    View Slide

  44. σʔϞϯ࣮ߦ
    w HJUIVCDPNMFTUSSBUHPUFTUNZTRME
    w Կ΋ߟ͑ͳͯ͘΋NZTRME͕࣮ߦͰ͖Δ

    View Slide

  45. ίϯςφ
    w (PͰ%PDLFSʹ઀ଓ͢Δϥούʔ
    w HJUIVCDPNGTPV[BHPEPDLFSDMJFOU
    w HJUIVCDPNPSZEPDLFSUFTU
    w ςετͷͨΊʹ.Z42-΍3FEJT઀ଓ͕Ͱ͖Δ

    ྗڧ͍ϥούʔ
    w ࣗલͰEPDLFSίϯςφͨͯΔ࣌ʹඞཁͳ

    ىಈ֬ೝऔΕΔ·Ͱͷ1JOHͳͲΛ΍ͬͯ͘ΕΔ

    View Slide

  46. ίϯςφ

    View Slide

  47. γϯϓϧͳ઀ଓ
    %#ͷίωΫγϣϯͳͲɺ
    DMPTFͷॲཧ͕ඞཁͳ΋
    ͷ͸ɺ
    UFBSEPXO༻ͷGVODΛฦ
    ٫͓͍ͯͯ͠ɺ
    ࢀর͍ͯ͠Δؔ਺಺Ͱ
    EFGFSͰ࣮ߦ͢Δͱ

    ҆શɻ

    View Slide

  48. 'JYUVSF
    w ϢχοτςετͱҟͳΓ༻్͕͍͔ͭ͋͘Δ
    w SFRSFTݕূ༻ͷQBZMPBE
    w ࣄલʹ%#ʹೖΕ͓ͯͨ͘Ίͷσʔλ
    w ڞ௨ͷϚελσʔλ
    w ݸผͷςετ༻ʹ༻ҙ͞Εͨσʔλ

    View Slide

  49. SFRSFTݕূ༻ͷQBZMPBE
    w JOQVUHPMEFOͰQBZMPBEΛ+40/ʹ·ͱΊ͓ͯ͘
    w ΫΤϦύϥϝʔλʔ΋ඞཁͳΒ੾Γग़͓ͯ͘͠

    View Slide

  50. ςʔϒϧ࡞੒ɾ࡟আ
    w ςʔϒϧఆ͕ٛ͹Βͭ͘ͱ໘౗ͳͷͰɺ

    HJUIVCDPNLLVCVOTRMEFGΛ࢖ͬͯ

    ҰݸͷεΩʔϚʹ࠷৽ͷঢ়ଶΛ·ͱΊ͓ͯ͘ͱศར

    View Slide

  51. ςʔϒϧ࡞੒ɾ࡟আ

    View Slide

  52. View Slide

  53. Ϛελσʔλςετ͝ͱͷσʔλ
    w ݸਓతʹ͸ҎԼͷΑ͏ʹɺϚελσʔλͱͦΕҎ֎
    Λ෼͚͍ͯΔ
    w UFTUEBUBpYUVSFTEFGBVMU
    w Ϛελσʔλ
    w UFTUEBUBpYUVSFTPQUJPOBM
    w ςετέʔεʹΑͬͯࢀরͨ͠Γ͠ͳ͔ͬͨΓ͢
    Δσʔλ

    View Slide

  54. σʔλ࡞੒

    View Slide

  55. σʔλ࡞੒

    View Slide

  56. ಛघͳσʔλૠೖ
    w .Z42- 1PTHSF42-ͳͲͷσʔλૠೖ͸ָ
    w ("&Λ࢖ͬͯΔͱ%BUBTUPSFʹ

    'JYUVSFΛೖΕͨ͘ͳΔ

    View Slide

  57. View Slide

  58. ETNPDL
    w 'JYUVSFͷ:".-ఆٛΛࢦఆ͢Ε͹ɺࢦఆͷ,JOEͷ
    σʔλΛྲྀ͠ࠐΊΔ
    w $MFBOVQ࡞ۀ͸ผ్ඞཁ

    View Slide

  59. ࣌ࠁɾཚ਺ݻఆ
    w ௨ৗͷςετͱಉ༷ɻϞοΫ༻ͷؔ਺Λఆٛͯ͠ɺ
    Ϧηοτ༻ͷؔ਺ΛSFUVSOͯ͠΋ྑ͍ɻ

    View Slide

  60. $POUFYU಺ม਺
    w DPOUFYU಺෦ͷ஋Λ࢖ͬͯॲཧ͢Δ৔߹ɺUFTU༻ͷDPOUFYUʹ஋
    ΛೖΕ͓ͯ͘ඞཁ͕͋Δ
    w ଟ෼օ͞Μ͕಺෦Ͱఆ͍ٛͯ͠Δ/FX$POUFYU8JUI999ͳϝ
    ιουΛݺͿͷ΋ྑ͍͕ɺͪΌΜͱϦΫΤετͱͯ͠

    ݕূ͢ΔͳΒͤΊͯSFRʹ஋Λૠೖ͓͖͍ͯͨ͠ɻ

    View Slide

  61. ֎෦"1*ͷ.PDL
    w ֎෦"1*͸΋͏Ͳ͏͠Α͏΋ͳ͍ͷͰ.PDL͢Δ
    w NPDLೖΕͯΔͷʹ࢖ͬͯͳ͍ͱΤϥʔͰऴྃ͢Δ
    ͷͰɺNPDL͚ͩ͸ॲཧΛڞ௨Խͤͣ
    ɺݸผͷςε
    τέʔεͰૠೖ͢Δɻ

    View Slide

  62. .PDLͷίϯτϩʔϥʔੜ੒

    View Slide

  63. .PDLར༻

    View Slide

  64. "1*SFRSFTͷݕূ
    w HPMBOHHP΍BQQFOHJOFͷެࣜύοέʔδʹ౓ʑ

    AUSZAͱ͍͏ϥούʔ͕͋Δɻ
    w ϦΫΤετݕূ΍ςετͷग़ྗ݁ՌͳͲͷݕূ͸

    AUSZAͱ͍͏ஆ͔͍ؔ਺͕΍ͬͯ͘Εͯͯɺ

    ඇৗʹ࣮૷ͷࢀߟʹͳΔ

    View Slide

  65. SFRSFTΛݕূ͢Δ৔߹ʜ

    View Slide

  66. View Slide

  67. View Slide

  68. ؆ૉ☺

    View Slide

  69. ͓·͚

    View Slide

  70. 5FTU3VOOFSࣗମͷϥούʔ
    w ΠϯςάϨʔγϣϯςετͰ΍Δ͜ͱ͸

    ͍͍ܾͩͨ·ͬͯΔ
    w UFTUJOH.Λड͚औΔؔ਺Ͱϥοϓͯ͋͛͠Δͱ

    εοΩϦ͢Δ

    View Slide

  71. View Slide

  72. ·ͱΊ
    w ۃྗ"1*ͷςετ͸ϢχοτςετͰϩδοΫΛ୲อͰ͖ΔΑ
    ͏ʹɺ࣮૷Λߏ଄ମۙ͘ʹدͤΔ
    w ΠϯςάϨʔγϣϯςετͷϊ΢ϋ΢͸·ͩ·ͩΦʔϓϯ͡Ό
    ͳ͍͚Ͳɺެࣜύοέʔδͷஆ͔͍ςετ͕ඇৗʹࢀߟʹͳΔ
    w γϯϓϧ͞ΛอͪͭͭɺͲ͜·Ͱڞ௨ԽͰ͖Δ͔͕୉ޣຯͳͷ
    ͰɺͦΕΛָ͠Έ·͠ΐ͏

    View Slide

  73. ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ

    View Slide