|
|
??????? Jim Anodoin Merrill?????????????????????????????????????????????????????????????BSV-Dev?????????????????????????????????
??????????????????????????????????????????????? bug????????? 10W ???????????????????????? Bug???????????????????????????????????????????????
??????????
??????????????????????? 100 ????????????????????????????????????????????????????????????????????????? bug ????????????????????????????????????????????????????????????????QA????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????
??????????????(CI)???????? 1 ????????????????????????????????????????????????????????? bug ???????? bug ? 8 ??????????????????????????????????????????
????????
?????????????????? (BVS) ???????????????????????????????????????????????????????????????????? Python ???????????? BVS ??????????????????????????????????????????????????????????????????????????????????
????????????(RPC)??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????
???????? KogMaw ???W??????????
- """
- Name: BioArcaneBarrage_DamageDealt
- Description: Verifies the damage modifications from Bio-Arcane Barrage
- Verifies:
- - KogMaw deals less damage to non-lane minions
- - KogMaw deals percentile magic damage
- - KogMaw deals normal damage to lane minions
- """
- from KogMawAbilityTest import KogMawAbilityTest
- from Drivers.LOLGame.LOLGameUtils import Enumerations
- import KogMawStats
-
- class BioArcaneBarrage_DamageDealt (KogMawAbilityTest):
- def __init__(self, championAbilities):
- super(BioArcaneBarrage_DamageDealt, self).__init__(championAbilities)
- self.ability = 'Bio-Arcane Barrage'
- self.slot = KogMawStats.W_SLOT
- self.details = 'Kog\'Maw deals reduced base-damage to non-minions with additional percentile damage'
- self.playerLocation = Enumerations.SRULocations.MID_LANE
- self.enemyAnnieLocation = Enumerations.SRULocations.MID_LANE.angularOffsetDegrees (45, 200)
- self.enemyMinionLocation = Enumerations.SRULocations.MID_LANE.angularOffsetDegrees (45, 400)
- def setup (self):
- super(BioArcaneBarrage_DamageDealt, self) .setup ()
- self.enemyAnnie = self.spawnEnemyAnnie (self.enemyAnnieLocation)
- self.enemyMinion = self.spawnEnemyMinion (self.enemyMinionLocation)
- self.teleport (self.player, self.playerLocation)
- self.issueStopCommand (self.player)
- def execute (self):
- self.takeSnapshot ('preCast')
- self.castSpellOnTarget (self.player, self.slot, self.player)
- self.champAttackOnce (self.player, self.enemyAnnie)
- self.takeRecentDeathRecapSnap (self.enemyAnnie, "annieRecap")
- self.resetCooldowns (self.player)
- self.castSpellOnTarget (self.player, self.slot, self.player)
- self.champAttackOnce (self.player, self.enemyMinion)
- self.takeSnapshot ('minionRecap')
- self.teleport (self.player, Enumerations.SRULocations.ORDER_FOUNTAIN)
- def verify (self):
- # Verify that enemy Annie is taking the correct amount of damage.
- annieAutoDamageEvents = self.getDeathRecapEvents (self.player, "Attack", "annieRecap")
- annieAutoDamage = 0
- for event in annieAutoDamageEvents:
- annieAutoDamage += event.PhysicalDamage
- annieSpellDamageEvents = self.getDeathRecapEvents (self.player, "Spell", "annieRecap", scriptName=KogMawStats.W_MAGIC_DAMAGE_SCRIPT_NAME)
- annieSpellDamage = 0
- for event in annieSpellDamageEvents:
- annieSpellDamage = event.MagicDamage
- AD = self.getStat (self.player, "AttackDamageItem")
- expectedPercentile = (KogMawStats.W_AD_DAMAGE_RATIO * AD)/100
- annieTotalHealth = self.getStat (self.enemyAnnie, "MaxHealth")
- expectedPercentileDamage = self.asPostResistDamage (self.enemyAnnie, expectedPercentile * annieTotalHealth, 'MagicResist', snapshot='preCast')
- self.assertInRange (annieSpellDamage, expectedPercentileDamage, expectedPercentileDamage * .1, "{} magic damage dealt. Expected ~{}".format (annieSpellDamage, expectedPercentileDamage))
- expectedPhysicalDamage = self.asPostResistDamage (self.enemyAnnie, KogMawStats.W_NON_MINION_DAMAGE_RATIO * AD, 'Armor', snapshot='preCast')
- self.assertInRange (annieAutoDamage, expectedPhysicalDamage, expectedPhysicalDamage * .1, "{} physical damage dealt. Expected ~{}".format (annieAutoDamage, expectedPhysicalDamage))
- # Verify that enemy minion is taking the correct amount of damage.
- AD = self.getStat (self.player, "AttackDamageItem")
- minionExpectedPhysicalDamage = self.asPostResistDamage (self.enemyMinion, AD, 'Armor', snapshot='preCast')
- expectedPercentile = (KogMawStats.W_AD_DAMAGE_RATIO * AD)/100
- minionTotalHealth = self.getStat (self.enemyMinion, "MaxHealth")
- minionExpectedMagicDamage = self.asPostResistDamage (self.enemyMinion, expectedPercentile * minionTotalHealth, 'MagicResist', snapshot='preCast')
- expectedDamage = minionExpectedMagicDamage + minionExpectedPhysicalDamage
- actualDamage = self.getDamageTaken (self.enemyMinion, 'preCast', 'minionRecap')
- self.assertInRange (actualDamage, expectedDamage, 1, "{} total physical and magic damage dealt. Expected ~{}".format (annieAutoDamage, expectedDamage))
- def teardown (self):
- self.destroy (self.enemyAnnie)
- self.destroy (self.enemyMinion)
复制代码
??KogMaw ????????????? Arcane Barrage ?????????????
????????????????????????????????????????????????????????????????????????????????????????? web ???????????????????????????????????????????????????????? bug ??? issue ?????????????????????????????????????????????????????????? bug ??????
? Wood 5 ???????????????????????????????
??????????????????????????????????????????????????????????????????? BVSStaging?????????????????????????? Staging ?????????????????????????
??????????????????????????????????BVSBlocker???????????????????????????? Blocker ??????????????????????????????????????????? bug ?????????BVS Core???????????????????????????
????????
??BVS ?????????????????????????????????? API??????????????????????????????????????????????????????LOL ????????????????????????????????????????? BVS ??????????? LOL ????????????
??????????????????...
???????????????????????????????????????????????????????????????????????BVS ??????? Python ??? argparse ????????????????? argparse ???????????????????????????????????????????????????????????????????????
- class TestFactory (API.TestFactoryAPI):
- requiredArgs = [ArgsObject ('driver', 'Driver you wish to use'),
- ArgsObject ('name', 'Name of the test to run')]
- optionalArgs = [ArgsObject ('overrideConfig', 'Use a non-standard game.cfg', None),
- ArgsObject ('gameMetadataConfiguration', 'A string identifying which game metadata to use', None),
- ArgsObject ('listener', 'Log listener to use', None),
- ArgsObject ('mutator', 'A string name for mutator to apply to test object', None),
- ArgsObject ('testInfoID', 'Test and metadata this test run is related to', None),
- ArgsObject ('testSubsetNumber', 'The number out of total if test is subsectable', None),
- ArgsObject ('totalSubsetNumber', 'The total numbers of subsets test is split into', None)]
复制代码???????????
????????????????????????????
??1????? ??????????????????? BVSBlocker ????????? CI ????????????????? JSON ???????? BVS???? VCS ? On-The-Fly ????
??2??? ?????????????????????????????????LoadChampsAndSkins ???????????????????????????????
??3????? are ?????????????????????? LoadChampsAndSkins ?? loadChampionAndSkin ???????????????????????????????????????? KogMaw ???????????????????????????????????????????????
??BVS ?????????????????????????????????? BVS ?? JSON ????????????????? JSON ????????????????????????????????????????? BVS ???????????????????????????????????????????????????????????????????????????????? JSON ???????????? 10 ??????????????
??BVS ?????????????????????????????????????????????????????????????????? RPC ???????????????????????? RPC ??????????????????????????????????????????????????
????? BVS ????????????? sleep?????????????? sleep????????????????????????????????????????????????????????????????
- @annotate ("Wait until a unit drops the specified buff.",
- arguments=[argument ("unitNameOrID", "Unit name (or unique integer unit ID).", (str, int)),
- argument ("buff", "Buff you want to drop.", str),
- argument ("timeout", "How long to wait.", float, default=STANDARD_TIMEOUT),
- argument ("interval", "How often to check for a change.", float, default=SERVER_TICK),
- argument ('speedUp', 'Whether to speed the game up.', bool, default=False)],tags=["wait", "buff", "change"])
- def waitForBuffLost (self, unitNameOrID, buff, timeout=STANDARD_TIMEOUT, interval=SERVER_TICK, speedUp=False):
- conditionFunction = lambda: not self.hasBuff (unitNameOrID, buff)
- return self.__waitForCondition (conditionFunction, timeout=timeout, interval=interval, speedUp=speedUp)
复制代码
???????? BVS ????????????????????????????????? BVS ???????????????????????????????????????????????????????????????????????????????? Django ????? Django REST ???????? API ? BVS ????????
????????
??????
???????BVS ??????????????? 18 ?????????? 5500 ?????????????? 10 ??????????????? BVS ?????????????????????????50% ? critical ? blocker ??? bug ?? BVS ????????????? QA ?? PBE ?????? BVS ????????????????????????????????
???????????? Bug ??????????????????????????????? bug ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????
??via???? ?? ??
???????????????????
|
|