Chrono Mock
IdiomaPortuguês (Brasil)

Faça o relógio de um app correr mais rápido

Um teste de 30 dias leva 30 dias para expirar, a menos que você consiga mover o tempo. O conselho habitual é adiantar o relógio do sistema, o que exige direitos de administrador e arrasta junto todos os outros programas da máquina. Isto move um processo só.

Quão rápido

Escolha um multiplicador inteiro. O relógio do aplicativo avança essas vezes mais rápido que o real, a partir do momento em que a sessão começa.

MultiplicadorUm minuto real viraÚtil para
x60uma horatarefas horárias, tempos limite de sessão, duração de tokens
x1440um diaviradas diárias, um teste de 30 dias em meia hora
x43200um teste de 30 diasver todo o período de teste acabar enquanto você lê isto
x525600um anorenovações anuais, expiração de certificados
x1000000cerca de 1,9 anoo teto
# Começar na hora real de agora e correr um dia por minuto
chrono run "C:\apps\test.exe" --mode x1440

# Começar em uma data escolhida e acelerar a partir dela
chrono run "C:\apps\test.exe" --at 2027-12-01T09:00:00 --mode x1440

# Manter o relógio completamente parado, em vez disso
chrono run "C:\apps\test.exe" --mode frozen
Uma gravação de uma sessão conduzindo outro aplicativo do Windows. A janela da esquerda é o Chrono Mock, com o relógio do aplicativo em 2038-01-19 subindo a sessenta vezes a velocidade real enquanto o relógio real ao lado avança poucos segundos. A janela da direita é o aplicativo testado, cujo próprio registro de sessão mostra que ele começou em 2038-01-19 e está rodando há minutos, contra pouco mais de meio minuto na sala.
Uma sessão real, conduzindo um aplicativo real. Repare na janela da direita: o programa testado registrou o próprio início em 19 de janeiro de 2038, e a sessão dele durou minutos enquanto o relógio da sala avançou segundos. A velocidade é mudada enquanto ele roda, sem reiniciar nada.

O que pega as pessoas de surpresa: existem dois relógios

Acelerar o relógio de parede - o que DateTime.Now e seus equivalentes retornam - não acelera, por si só, uma contagem regressiva. São duas perguntas diferentes que um aplicativo pode fazer ao sistema operacional, e muito software mede “trinta dias” com a segunda em vez da primeira.

Então o eixo de duração - contagens de ticks, suspensões, esperas e temporizadores - é uma chave separada:

  • --scale-duration põe também os contadores de ticks, as pausas e os temporizadores no relógio da sessão, enquanto as esperas por objetos são contadas e mantêm a duração real. Sem ele, x1440 acelera o calendário enquanto um temporizador de cinco segundos continua durando cinco segundos reais - só um temporizador marcado para uma data e hora segue o relógio da sessão em toda sessão.
  • --scale-qpc escala adicionalmente o contador de alta resolução. É de onde Python 3.13+ monotonic, .NET Stopwatch e Java nanoTime leem o tempo decorrido, e vem desativado por padrão porque escalá-lo desestabilizou a renderização nos testes.

Se o multiplicador parece não fazer nada com uma contagem regressiva, quase sempre é por isso.

# Um app de temporizador: acelerar o calendário E as contagens regressivas
chrono run "C:\apps\Timer.exe" --mode x60 --scale-duration

# Um app Python ou .NET que mede o tempo decorrido no contador de alta resolução
chrono run "C:\apps\Job.exe" --mode x60 --scale-duration --scale-qpc

Mudando a velocidade sem reiniciar

O multiplicador pode mudar no meio da sessão, e o relógio é reancorado em vez de saltar, então ele nunca volta atrás quando a velocidade cai. Você também pode fazer o relógio saltar de uma vez - para frente, ou para trás do jeito que um notebook faz depois de ressincronizar com um servidor de horário, que é o caso que quebra tudo o que mede tempo decorrido sem uma proteção.

# Rodar a x60 e passar para x1440 depois de dois segundos
chrono run "C:\apps\test.exe" --mode x60 --set-after 2:1440

# Rodar e, depois de cinco segundos, saltar o relógio para um momento escolhido
chrono run "C:\apps\test.exe" --jump-after 5:2028-01-01T00:00:00

O que ele não faz

  • Ele não mexe no relógio do sistema. Esse é o ponto, não uma limitação - mas significa que tudo o que lê a hora de um servidor, de um banco de dados ou de outra máquina não é afetado, e a auditoria avisa quando isso acontece.
  • Um salto muda o que o aplicativo vê, não quando ele acorda. Pausas e temporizadores já entregues ao kernel mantêm a duração que receberam ao serem marcados. A maioria dos aplicativos consulta o relógio, então os saltos funcionam na prática - mas não em todos.
  • Ele não desacelera o tempo. Os multiplicadores são números inteiros de um para cima, mais um relógio congelado em zero.

Se algo disso chegou ao seu aplicativo não é algo para presumir. A sessão diz →

Experimente